Hey Guys,
ich experimentiere wieder etwas mit den Window Klassen, damit ich diese endlich mal erlerne und auch verstehen ^^
So versuche ich grad eine Liste zu machen, die jeden Status anzeigt und dabei angibt, ob der Actor mit diesem Status betroffen ist oder nicht. Wenn man Enter drückt, so soll der Status on/off triggern. Aber der ok-Handler scheint einfach nicht zu funktionieren?
--
Facebook
Maker: VX Ace
Projekt: Hyperverse Theory (Fantasy-SciFi RPG)
Status: nur Planung
Geändert von MindXperience (07.03.2014 um 19:53 Uhr)
Das ist alles weitestgehend richtig. Zwei Fehler sind mir aufgefallen:
Die Methode state? erwartet die ID des States, nicht das State Objekt selbst. Und die RGSS ist an der Stelle leider sehr sparsam mit Fehlermeldungen. Also einfach state.id hinschreiben.
Das soll vermutlich @state_window.refresh heißen.
Solche blöden Fehler findet man nur durch exzessives Einfügen von print Befehlen.
Es heißt tatsächlich status_window, da ich noch weitere Fenster habe.
Außerdem habe ich schon eindeutige Befehle in "def on_state_ok" eingefügt (zB prints), aber die Methode wird einfach nicht gestartet
--
Facebook
Maker: VX Ace
Projekt: Hyperverse Theory (Fantasy-SciFi RPG)
Status: nur Planung
Ich hab deinen Code so in Scene_Map reingepresst und die zwei Stellen korrigiert. Damit funktioniert es.
Eine Zeile hab ich noch eingefügt:
muss nach @actor.remove_state aufgerufen werden, da ein Zustand der beseitigt wurde in der selben "Kampfrunde" nicht noch einmal gesetzt werden darf.
Okay, Fehler gefunden. Das Problem liegt darin, dass (bezogen auf die OK und CANCEL Handler) immer nur ein Fenster aktiv sein darf (also sozusagen im Fokus liegen kann). Bei dir fängt ein anderes Window den Tastendruck Enter ab, daher kommt der in Window_DebugState nicht mehr an. Klassen die von Window_Selectable erben, sind automatisch erstmal inaktiv. Klassen die von Window_Command erben, sind automatisch aktiv. Du musst also deine Klassen, Window_DebugClass und Window_Level direkt nach der Initialisierung deaktivieren, sonst liegen die im Fokus und fangen die OK und CANCEL Handler ab. Ob ein Fenster aktiv ist, ist komplett unabhängig davon ob ein Fenster angezeigt wird. hide() allein reicht also nicht aus, du musst auch deactivate() aufrufen.