Ergebnis 1 bis 3 von 3

Thema: Dynamisch erzeugte Events verhalten sich komisch

  1. #1

    Dynamisch erzeugte Events verhalten sich komisch

    Ich hab seit langem mal wieder den XP ausgegraben und mit RGSS rumgespielt. Ich wollte mal testen, ob ich es schaff, Events zur Laufzeit dynamisch zu erzeugen. Meine Versuche, die Events komplett selbst zu erstellen, sind leider nicht sonderlich gut verlaufen, aber mit einem Event Spawner Script, das ich bei der Recherche zufällig entdeckt hab, ging das dann letztendlich auch. Zur Übung hab ich ein Script gebastelt, das beim Betreten einer Map ein Event erstellt, das dem Spieler folgt. Das eigentliche Folgescript sieht in etwa so aus:

    (Pseudocode, weil das Ganze ein Gemisch aus Ruby und normalem Event Script ist)
    Code:
    if event.x != player.x || event.y != player.y
      wait 3
      loop
        if event.x != player.x || event.y != player.y
          move towards_player
          wait 1
        else
          goto Ende
        end if
      end loop
    end if
    label Ende
    Das Event hat keine Kollision und das Script wird als Parallel Process ausgeführt. Damit Steht es an der gleichen Stelle wie der Spieler, wenn er steht und folgt ihm mit etwa einem Tile Abstand, wenn er sich bewegt.

    Mit einem Event, das ich direkt auf die Map setze, funktioniert das wunderbar, aber bei dem dynamisch erzeugten Map scheinen die waits nicht richtig zu passen. Der Abstand beim Loslaufen ist zu klein und mit der Zeit wird das Event immer weiter abgehängt. Zwei verschiedene dynamisch erzeugte Events verhalten sich aber untereinander exakt identisch, es kann also eher keine zufällig auftretende Verzögerung sein. Ich kann mir wirklich nicht erklären, was da los ist. Die Events sollten eigentlich exakt identische Werte und Scripts haben.

    Ich hab mein Testprojekt mal hochgeladen. Das Event mit den braunen Haaren ist das, das direkt im Maker erstellt wurde, das mit den grünen Haaren das dynamisch erzeugte. Die Erzeugung läuft in den Scripts Spawn_Event und Follower (ganz unten in der Liste). Zusätzlich hab ich von jedem Event einen Dump der jeweils aktiven Seite als txt mit ins Archiv gepackt (Erstellt mit File.new("xxx.txt", "w").write($game_map.events[id].list.inspect))

  2. #2
    Lustiges Script. Wenn man statt
    Code:
    @event.list(1, 106, [3]) #wait 3
    einen Wait von 2 macht, dann bewegt sich das dynamische Event synchron zum Spieler und wird nicht mehr abgehängt, jedoch klebt es zu sehr am Arsch des Helden. Kannst du was damit anfangen?

  3. #3
    Ja, ist mir auch schon aufgefallen und macht die Sache nur noch mysteriöser. Das spricht irgendwie dafür, dass die Schleife zum falschen Zeitpunkt verlassen wird. Ich werd mir das nochmal im Detail anschaun.

    Edit:
    Ich hab das Problem gefunden. Ich hatte erst angenommen, dass @indent nur für die korrekte Darstellung im Maker zuständig ist, aber das spielt auch bei der Verarbeitung eine Rolle. Wenn Commands nicht eingerückt sind, werden umstehende ifs ignoriert. Dementsprechend wurden sowohl if- als auch else- Block ausgeführt. Ich hab das Skript jetzt entsprechend modifiziert und siehe da, es funktioniert. Jetzt habe ich ein Partymitglied, das mir auf allen Maps folgt, ohne, dass ich es extra einfügen muss. Ich werde noch ein paar Veränderungen vornehmen und es dann vorstellen.

    Geändert von DFYX (22.05.2009 um 23:35 Uhr)

Berechtigungen

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