Ergebnis 1 bis 8 von 8

Thema: Player bleibt bei Menüaufruf nicht stehen

  1. #1

    Player bleibt bei Menüaufruf nicht stehen

    Hallo Leute, und schon wieder melde ich mit einem Problem.
    Und zwar habe ich vor, ein Menü zu machen, mit Pictures und allem drum und dran.
    Allerdings weiß ich zum Verrecken nicht, wie ich den Player "freezen" kann.
    Im 2000/3er ging das, indem man einfach ein Move Event mit Wait gemacht hat, bei XP geht das nicht mehr.
    Andere NPCs würden dann aber trotzdem noch rumlaufen. Und wenn man für das ganze ein Auto Event macht, kann man sich gar nicht mehr bewegen, das Menü muss also ein Paralleler Prozess sein.
    Gibt es also eine Möglichkeit, alle Events inklusive Player zu freezen? Von mir aus auch mit Script.
    Danke schonmal im Voraus!

  2. #2
    Wechsel die $scene zu einer eigenen neuen. Die Update-Methoden aller Kartenobjekte werden durch die $scene hervorgerufen.
    Falls du die Karte selbst im Hintergrund sichtbar behalten möchtest müsstest du jedoch ein wenig weiter herumbasteln um das Spriteset der Scene_Map zu übernehmen.
    Andernfalls könntest du auch einfach die Scene_Map Klasse so überarbeiten, dass du eine Pause-Funktion für Events und Player einbaust.

  3. #3
    Leider habe ich keine Ahnung von Ruby, könntest du mir das vielleicht ein wenig simpler erklären?

  4. #4
    Wir haben in der Scene_Map folgende Update Methode:

    Hintereinander werden hier die erforderlichen Update-Prozesse ausgeführt, damit wird Frame für Frame das Spiel fortgesetzt.
    In dieser Methode können wir nun mithilfe einer Abfrage auf den Wert einer Variablen gewisse Bereiche abschalten wenn wir möchten.
    Die Frage ist nur welche Bereiche wir herausfiltern wollen.

    Wenn du willst, dass das derzeitige Event weiterausgeführt werden kann aber weder der Spieler noch übrige Events wie NPC's Aktionen ausführen können so müssen wir unseren Fokus auf diese drei Zeilen am Anfang des Updates richten:
    Code:
          $game_system.map_interpreter.update
          $game_map.update
          $game_player.update
    Hier wird der Interpreter (Dein Event-Code) die Map (Mit allen übrigen Events) und der Spielercharakter (Mit Bewegungen und allen übrigen Aktionen) geupdated.

    Wir können hier nun beispielsweise eine Abfrage wie folgt einbauen:
    Code:
          $game_system.map_interpreter.update
          if $game_switches[1]
            $game_map.update
            $game_player.update
          end
    Das würde dazu führen, dass alle Events (außer dem derzeit laufenden) und der Spieler nichtmehr geupdated werden würden falls der Switch (Nicht self-switch!) mit der ID 1 auf false stehen würde.

    Du kannst die Bedingung natürlich auch auf alles andere Stellen was dir beliebt.
    Ich hoffe das hilft dir ersteinmal weiter.

    Das Script findest du deklariert als "Scene_Map" im unteren Bereich des Scripteditors, die Update Methode beginnt ab Zeile 56, das eingefügte "if" würde an Zeile 64 liegen. Alles natürlich angenommen du hast keines der Scripte derzeit verändert und benutzt die Bedingung wie ich sie oben beschrieben habe.

    Falls du noch Fragen oder Probleme haben solltest stell sie ruhig, ich bin sicher, selbst wenn ich gerade keine Zeit finde wird sich jemand finden lassen der dir dabei helfen kann.

  5. #5
    Okay, das macht soweit Sinn. Dankeschön dafür! Allerdings bleibt dann das ganze Spiel stehen, weil der Switch ja nicht an ist. Und selbst wenn ich den in einem Event auf der Startmap und Autostart an schalte, funktioniert das ganze nicht. Ich denke mal, dass es sinnvoll wäre, den Switch im Titelbildschirm auf true zu setzen (wenn das überhaupt geht).
    Wie kriege ich das hin?

  6. #6
    Ist alles möglich, einfacher wäre es natürlich aber die Condition lediglich umzudrehen und darauf zu prüfen, dass der Switch aus ist.
    Eine Bedingung kann man auf verschiedenem Wege umdrehen:
    Code:
    if not $game_switches[1]
    oder aber:
    Code:
    if !$game_switches[1]
    Hat den gleichen Effekt, meiner Meinung ist die erste Variation allerdings leichter zu lesen und zu verstehen.

  7. #7
    Dankesehr. Nur gibt's nun wieder ein Problem: Wenn das Menü geschlossen wird, soll der Switch wieder an gemacht werden, d.h. dass alles wieder läuft. Nur leider bleibt dann immernoch alles stehen.
    Entschuldige, wenn ich dich mit der ganzen Fragerei nerve.

  8. #8
    Ich sehe, das funktioniert nicht mit wait-, loop- und label-Befehlen.

    Hier ist eine zweite, ein klein wenig aufwändigere Variante welche es dir erlauben wird parallel und auto-start common events weiterhin zu benutzen allerdings alle normalen Events, den Player und alle Common-Events mit Call-Aufruf pausiert.

    In der Klasse "Game_Map" müssen in Zeile 392 die folgenden Zeilen ersetzt werden:
    Code:
        for event in @events.values
          event.update
        end
    werden ersetzt durch:
    Code:
        if not $game_switches[1]
          for event in @events.values
            event.update
          end
        end
    Und in der Klasse "Scene_Map" werden in Zeile 54 die folgenden Zeilen Code ersetzt werden:
    Code:
          $game_system.map_interpreter.update
          $game_map.update
          $game_player.update
    wird ersetzt durch:
    Code:
          $game_system.map_interpreter.update
          $game_map.update
          if not $game_switches[1]
            $game_player.update
          end
    Nun sollten parallele common events und autostart common events weiterhin funktionieren.

Berechtigungen

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