Ergebnis 1 bis 11 von 11

Thema: RM2K: Maus-Patch-Koordinaten-Abfragen funktionieren nicht.ERST DURCHLESEN DANN POSTEN

  1. #1

    RM2K: Maus-Patch-Koordinaten-Abfragen funktionieren nicht.ERST DURCHLESEN DANN POSTEN

    Eines vorne weg:

    Ich bin genervt.

    Extrem genervt.

    Was man auch anpackt - es schlägt fehl.

    Ich benutze den Mauspatch von Ineluki.



    Obiges hat alles geklappt.

    Aber langsam dreh ich durch. Echt mal.

    Ich bin kein Anfänger und gewiss nicht dumm, aber der RM2K ist abartig und ich hätte mir nie erträumt, dass Maussteuerung so kompliziert ist. Ganz ehrlich. Ich schildere euch mein Problem kurz und knapp. Möglicherweise ist ja jemand in der Lage mir zu helfen. War bisher leider hier nicht der Fall.

    Also:

    Maussteuerung. Ich beiße mir die Zähne dran aus. Ganz ehrlich. Ich glaube irgend eine höhere Macht möchte, dass ich in meinem Spiel keine Maussteuerung verwende.

    Ich benutze einen Cursor, dessen Koordinaten ich mit "Mouse X" und "Mouse Y" abfrage. Wenn ich ein Objekt meiner Wahl mit diesem Cursor berühre möchte ich, dass dieser Cursor sich rot färbt. Wenn ich mit dem Cursor von diesem Objekt wieder weggehe möchte ich, dass der Cursor wieder grau wird. Das wars eigentlich. Dies versuche ich dadurch zu realisieren, dass ich die verdammten Koordinaten der Fläche abfrage:

    1.)



    Diese Gridkoordinaten dieses Events will ich abfragen.



    Tu ich auch. Funktioniert wunderbar.

    2.)



    Diese Gridkoordinaten dieses Events will ich abfragen.



    Tu ich auch. Funktioniert auch irgendwie.

    3.)



    Diese Gridkoordinaten dieses Events will ich abfragen.



    Tu ich auch. Und ZACK, Abfrage Nummer 2 funktioniert nicht mehr!

    What the fuck...?? Es ist eine absolut identische Abfrage, die einfach nicht funktioniert, stattdessen setzt sie Abfrage Nummer 2 sogar außer Gefecht. Ich kann keinen Fehler finden, bin seit Stunden hier beschäftigt und finde nichts.

    Was ist daran falsch?

    Ich muss 17 (!) Abfragen dieser Art machen und es scheitert bereits an der dritten bzw. die dritte Abfrage setzt alles außer Kraft. Wenn ich eine vierte Abfrage einbaue (für das darauffolgende Event) funktioniert das zweite wieder super, aber die dritte Abfrage ist außer Gefecht. WHAAAAT?? Mal ehrlich, was kann ich da tun?

    Bitte um hilfreiche Vorschläge wie ich dieses Problem lösen kann, welches sich doch eigentlich so simpel anhört. -.-

    Bitte postet hier nur, wenn ihr mir helfen könnt. Keine Vermutungen oder sonstiges. Nur konkrete Lösungsvorschläge !!

    Hoffe einer von euch erfahrenen Technikern (sollte es dir geben....) kann mir helfen...

    Hoffe auf hilfreiche Antworten...

    Grüße TwoFace

    Geändert von TwoFace (25.02.2013 um 22:50 Uhr)

  2. #2
    Ich finde es einerseits relativ blöd, jede Abfrage in einem extra Event zu haben, und dann auch noch ohne minimalste Waits (möglich, dass sich die Abfragen da überlagern und gegenseitig ignorieren)
    Schau doch mal im Test-Modus, was dieser beim jeweiligen Punkt für Variablen-Werte ausspuckt (F9).

    Edit
    Ich würde tatsächlich darauf tippen, dass es an den vielen Events liegt! Denn jedes davon tauscht praktisch zu jeder Zeit deinen Cursor aus, sprich auch wenn du auf einem Punkt hängst, werden die anderen Punkte abgefragt, und da der Zeiger nicht auf jenen hängt, wird ausgegraut!

    Geändert von Ringlord (25.02.2013 um 23:00 Uhr)

  3. #3
    Zitat Zitat von Ringlord Beitrag anzeigen
    Ich finde es einerseits relativ blöd, jede Abfrage in einem extra Event zu haben, und dann auch noch ohne minimalste Waits (möglich, dass sich die Abfragen da überlagern und gegenseitig ignorieren)
    Schau doch mal im Test-Modus, was dieser beim jeweiligen Punkt für Variablen-Werte ausspuckt (F9).
    ich wollte die Abfragen später in einen Event zusammenfassen, hab es auch schon testweise probiert. Aber die Abfragen funktionieren zusammen weder einzeln noch in einem Event zusammengefasst. Mit F9 hab ich die Werte der Variablen und Switches bereits mehrmals gecheckt. Die Werte befinden sich im von mir vorgegebenen Rahmen, demnach müsste die Abfrage eigentlich funktionieren - tut sie aber nicht.

  4. #4
    Wie werden eigentlich die jeweiligen Gx-Switches aktiviert? Vlt ist da der Fehler.

    Edit
    Und denk mal an Waits, die können Wunder bewirken

    Geändert von Ringlord (25.02.2013 um 23:13 Uhr)

  5. #5
    Die Switches aktiviere ich alle in einem Parallel Process. Die sind immer an, da is der Fehler nich.

  6. #6
    Ich würde dennoch denken, dass das Problem in der gleichzeitigen Aktivierung aller Positionsabfragen verteilt über mehrere Events liegt, und durch die unterschiedliche Höhe der einzelnen IDs werden manche ignoriert bzw. als unwichtiger eingestuft und dementsprechend übergangen, und die ausbleibenden Waits tun dabei ihr übriges.

    Es wäre vlt eine gute Idee, das Ding mal hochzuladen, falls es dir nicht zu schwer fällt

  7. #7

    Gucken wir mal, was in G3 passiert, wenn die Maus auf G2, also bspw. (180|170), ist.

    If1 - passt. Der Switch ist ja laut deiner Aussage so oder so an.
    If2 - passt. X ist 180, das ist kleiner als 224.
    If3 - passt nicht. 180 ist nicht größer als 208, wir gehen zum ELSE CASE, der Graue Mauszeiger wird angezeigt.

    Joah, weiter würde ich erstmal nicht gucken. Deine Events kommen sich in die Quere; somit wie G3 durchlaufen wird, wird der rote Mauszeiger hier wieder auf Grau gesetzt, egal, was G2 dazu meint. Dass G2 wieder funktioniert wenn du ein G4 einbaust bekomme ich gerade zwar auch nicht ganz gepackt, aber dass du bei dem Code Probleme bekommst ist klar.



    Ich würde es - so aus dem Kopf, also nicht getestet - so machen, ohne die ganzen einzelnen Codestücke:

    SWITCHES
    0001:G1 drauf
    0002:G2 drauf
    0003:G3 drauf

    VARIABLEN
    0001:Event X
    0002:Event Y
    0003:Switchpointer
    0004:Maus X
    0005:Maus Y

    Code (Common Event (Call): "Mausabfrage"):
    If V[0004:Maus X] > V[0001:Event X]
    ..<>V[0001] + 16
    ..If V[0004] < V[0001]
    ....If V[0005:Maus Y] > V[0002: Event Y]
    ....<>V[0002] + 16
    ......If V[0005] < V[0002]
    ........<>Switch [V[0003:Switchpointer] ON
    ......:ELSE CASE
    ........<>Switch [V[0003:Switchpointer] OFF
    ......:END CASE
    ....:ELSE CASE
    ......<>Switch [V[0003:Switchpointer] OFF
    ....:END CASE
    ..:ELSE CASE
    ....<>Switch [V[0003:Switchpointer] OFF
    ..:END CASE
    :ELSE CASE
    ..<>Switch [V[0003:Switchpointer] OFF
    :END CASE

    Code (Parallel Process):
    <>V[0001:Event X], set 144
    <>V[0002:Event Y], set 160
    <>V[0003:Switchpointer], set 1
    <>Call Event: Mausabfrage
    <>V[0001] + 16
    <>V[0003] + 1
    <>Call Event: Mausabfrage
    <>V[0001] + 16
    <>V[0003] + 1
    <>Call Event: Mausabfrage
    <>If Switch[0001] = off
    ..<>If Switch[0002] = off
    ....<>If Switch[0003] = off
    ......<>Show Picture: GRAU
    ....:ELSE CASE
    ......<>Show Picture: ROT
    ....:END CASE
    ..:ELSE CASE
    ....<>Show Picture: ROT
    ..:END CASE
    :ELSE CASE
    ..<>Show Picture: ROT
    :END CASE

    Das was sich da wiederholt sind immer die neuen mindest-X-Werte, hier demnach für deine 3 Events die du oben ind en Screenshots gezeigt hast. Da die bei dir alle exakt 16px auseinanderliegen wäre es unnötige Arbeit, jedesmal die Zahlen einzutippen, zumal sowas (zumindest bei mir) irgendwann zu Tippfehlern und somit lästigen Bugs führt... Wenn ALLE deine Events in einer Reihe und 16px auseinander liegen würde ich das mit einem Pointer sogar noch weiter zusammenfassen; bei 10 Events wäre das dann so:

    Code:
    <>V[0006:VPointer], set 10
    <>Label: 1
    <>V[0001] + 16
    <>V[0003] + 1
    <>Call Event: Mausabfrage
    <>V[0006]-1
    <>If V[0006] = 0
    ..<>Go to Label: 2
    :ELSE CASE
    ..<>Go to Label: 1
    :END CASE
    <>Label: 2
    Die Idee dahinter ist, dass du die Koordinaten des ersten Events angibst und der Maker sich die der anderen Events selbst ausrechnet. Wenn du echt 17 solcher Events hast und die regelmäßig auf der Map verteilt sind, würde ich sowas nehmen. Sonst bekommst du die Krise.

    Geändert von BDraw (26.02.2013 um 00:36 Uhr)

  8. #8
    Verzweifle nicht, ich hab die Lösung

    Sowas ähnliches habe ich mit DynRPG schonmal gebastelt, der Trick ist hier den Event IDs und den Call Commonevent auszunutzen.
    (Vorsicht das ist alles in Pseudo Code jetzt, zur Not kann ich mal schaun ob ich das Projekt noch hab und es dir schicken.)

    (Ich gehe mal davon aus, dass die Events Gegner sein sollen)
    Vorbereitung:
    Du solltest dir im Klaren sein, wieviel Gegner es maximal in einem Kampf geben soll, aus deinem ersten Post nehme ich mal an es sind 17. Jetzt legst du 17 Events hintereinander an, wichtig dabei, dass deren Event ID fortlaufend ist. (d.h. von z.B. 20-37)
    Optimal ist es auch, wenn die Events hohe Event IDs besitzen, denn wenn du den Get Event ID-Befehl auf ein Feld benutzt auf dem mehrere Events liegen wird nur die höchste ID der Events zurück gegeben! (afaik)


    Für die Mausabfrage benutzt du einen Parallelen Prozess. Du fragst die X- und Y-Koordinaten des Cursors ab und dann rechnest du sie ins Maker-Koordinatensystem um (einfach /16). Anschließend speicherst du die Event-ID an Maus-X-Grid und Maus-Y-Grid.
    Nun fragst du ab, ob die Event ID größergleich deiner ersten Gegner-Event-ID (hier 20) und kleinergleich der größten ist (hier 37). Wenn ja => roten Cursor anzeigen, wenn nein => grauen.
    Jetzt speicherst du die aktuellen Grid-Koordinaten in zwei Variablen (Grid-X-Old & Grid-Y-Old). In deinem Parallelen Prozess fragst du ab, ob sich die Grid-Position im Vergleich zu Grid-Old verändert hat, denn wenn nicht hast du das Feld bereits gecheckt und brauchsts ja nicht nochmal machen
    Ans Ende kannst du (glaube ich) einen 0.0 Wait für die Performance packen.

    (Achtung Pseudo-Code)
    Code:
     
    Maus-Grid-X = Maus-Pos-X /16
    Maus-Grid-Y = Maus-Pos-Y/16
    
    if (Maus-Grid-X != Grid-X-Old || Maus-Grid-Y != Grid-Y-Old)
       Grid-X-Old = Grid-X-Old
       Grid-Y-Old = Grid-Y-Old
       Event ID = Get Event ID (Maus-Grid-X, Maus-Grid-Y)
       If (19 < Event ID < 38)
          Cursor rot anzeigen
       else
          Cursor grau anzeigen
       end
    end 
    
    Wait 0.0
    Ein einfacher Trick, um anklickbare Events zu machen ist, wenn du in den obigen Code noch einen Schnipsel mit dem Call Common Event einfügst und die erste Seite des Events aufrufst, dass du mit Get Event ID gespeichert hast.
    Code:
    if (Switch: Rechts Klick = ON)
       Page ID = 1
        If (19 < Event ID < 38)
          Call Common Event (Event ID, Page ID)
        end
    end

  9. #9
    Hab nicht wirklich ne Ahnung aber...
    ...vielleicht kommt ja der Maker nicht klar, dass du in so vielen Parallelen Prozessen gleichzeitig immer wieder die Variablen MausX und MausY auslesen willst...
    Vielleicht blockiert sich der Read Befehl oder was immer das ist, dann mit den anderen... u.U. gibts ja eine Lösung alle Events in einem Event zu testen ^^°

  10. #10
    Du hast da tatsächlich einfach ein Synchronisationsproblem: Die Events laufen gleichzeitig (intern blockweise, darum passiert bei 2 Events anscheinend noch nix), verwenden bei dir also gleichzeitig die Variablen 0002 und 0003, was natürlich nicht gehen kann.

  11. #11
    Puh... schwere Geburt. Habs hinbekommen, Danke Leute.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •