Ergebnis 1 bis 3 von 3

Thema: Problem bei auswahlfenster

  1. #1

    Problem bei auswahlfenster

    Hallo,
    ich bin neu im RGSS und ich wollte ein Auswahlfenster erstellen.
    Es funktioniert soweit nur das ich beim Ausführen(den linken Char ansprechen) in einer endlossschleife
    endet. Also nach dem ersten ansprechen wird das Fenster geöffnet und beim Drücken auf "Zurück" dann wieder.




    Code:

    http://pastebin.com/GtYRir2b


    Wie schaffe ich es nach dem Drücken auf den "Zurück" Button den Szenen Input zu verhindern(oder so ähnlich)?

    Danke im Voraus!

    Geändert von Hendy (30.07.2011 um 13:26 Uhr)

  2. #2
    Okay, das ist etwas verworren und kompliziert: Die Scene_Map prüft erst alle Tasten, updatet danach die Map, und danach den Player. Der Player prüft, ob er vor einem Event mit [Push Key] steht und die Entertaste gedrückt gehalten wird. In diesem Fall merkt sich das Event, dass es gestartet werden soll. Das Starten des Events wird aber vom Interpreter durchgeführt, der Teil der Map ist. Da die Map aber vor dem Player geupdatet wird, kommt es zu dem verworrenen Effekt, dass das Event erst im nächsten Frame gestartet wird. Also nochmal: Map-Update, Player Update -> führt zur Aktivierung des Events, nächster Frame, wieder Map-Update -> Map sieht das aktivierte Event und startet den Interpreter.

    Wichtig ist nun, dass die Tasten vor dem Updaten der Map geprüft werden. Das heißt du klickst das Event an, das Event wird aktiviert. Im nächsten Frame werden die Tasten erneut geprüft. Dann wird die Map geupdatet, was zum Starten des Interpreters führt, der wiederum dein Menü aufruft. Dort werden erneut die Tasten regelmäßig abgefragt. Das Menü wird beendet, wenn du die Entertaste gedrückt hast. Danach ist der Interpreter und damit die Updateroutine der Map fertig und es kommt zum Update des Players. Da du aber noch die Entertaste gedrückt hast (um das Menü zu beenden) erkennt der Player jetzt wieder, dass er vor einem Push-Key Event steht und aktiviert dieses. Im nächsten Frame ist zwar die Taste nicht mehr gedrückt, aber das Event bereits aktiviert.

    Einfachste Lösung wäre ein Input.update ans Ende deines Menüs anzuhängen. Denn eine Eigenschaft des trigger? Befehls ist ja eben, dass bei zwei aufeinanderfolgende updates niemals dieselbe Taste beide Malen gedrückt sein kann.

    Ansonsten wäre noch zu überlegen, ob du die Schleife nicht ganz aus deinem Menü entfernst. Diese Hauptschleife mit Graphics.update und Input.update sollte möglichst nur in einer Scene verwendet werden. Spätestens wenn du z.B. Wettereffekte einfügst, wirst du feststellen, dass während deines Menüs auch der Regen "eingefroren" ist. Im Rubykurs gibt es ein Kapitel zu einem MultipleChoice Menü, welches im Grunde genommen so ziemlich dasselbe ist, was du auch machst. Dort wird das Menü in Eventbefehle (Loop, Conditional Branch etc.) eingebettet. Das ist auch nicht optimal, aber die "bessere" Lösung hab ich mir für ein späteres, noch nicht fertig geschriebenes Kapitel aufgehoben. Prinzipiell hat die Lösung aber den Vorteil, dass das Spiel nicht komplett eingefroren ist, parallele Prozesse und andere Hintergrundarbeiten also noch weiterlaufen.

  3. #3
    Danke für die Antwort!

    Ich habe das Problem jetzt mit der simplen Variante gelöst.

    Code:
        loop do
          
          if @close == true
            self.dispose
            break
          end
    
    
          self.updateWindow
          
          Graphics.update
          Input.update
        end

Berechtigungen

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