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)
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))