PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Move-Event-Sprung



1(!)5(!)1
14.01.2007, 20:28
Ich schildere mein Problem jetzt mal anhand eines Beispiels:
Ein Event (Person oder so) verfolgt den Helden. Wenn diese Person den Helden berührt, soll der Held an eine bestimmte Stelle in der Karte hüpfen. Da aber der Ort, an dem sich die Person und der Held berühren immer variiert, wäre so ein Koordinatensystem für Sprünge wie im Rpg-Maker XP praktisch. Leider unterstützen der RPG Maker 2003 oder 2000 diese Funktion nicht, soweit ich weiß.

Ich weiß, das klingt zeimlich wirr und unverständlich, aber weiß evtl. jemand, wie man den Helden an eine bestimmte Stelle in der Karte hüpfen lassen kann, egal, wo er sich gerade befindet? Mit dem vorgegeben Move-Event Editor, in dem man immer nur die Richtungen der Schritte und Sprünge eingeben kann, wäre so etwas kaum möglich.

Phönix Tear
14.01.2007, 21:59
Wenn ich mich nicht irre wird das leider nur auf einen Umweg möglich sein.
Das Problem bei der Sache ist ja, dass man den "Jump" Befehl nur in einem einzelnen Move-Event benutzen kann. Sobald man dieses ohne "End Jump" verlässt, springt der Held einfach gar nicht. Das macht leider eine Koordinatenabfrage zwischen Sprungstart und Sprungende unmöglich.
Natürlich könnte man jetzt für jedes Feld auf der Karte eine Möglichkeit machen, aber - sein wir ehrlich - das will wohl keine machen. (Bei einer 50x50 Map wären das immerhin 2500 Möglichkeiten...)

Somit kommen wir nun zur Behelfslösung:

Wenn wir den Held nicht über den "Jump" Befehl springen lassen können macht das erstmal nix. Der Spieler sieht ja nur, was auf der externen Ebene geschieht und hat mit der internen wenig zu tun. Was ist also die Aufgabe? Genau: Die externe Ebene so zu lassen wie sie auch beim "Jump" Befehl ist.
D.h:
-Der Held muss etwas über dem Boden schweben
-Der Held wird extrem schnell (das der Maker für jeden Sprung (egal wie weit) die gleiche Zeit braucht lassen wir hier mal weg)
-Der Held kann sich durch alles durchbewegen, solange der Sprung-End-Punkt nicht blockiert ist

Und das wars auch schon. Punkt 2 und 3 sind einfach zu lösen ("Move Speed Up" und "Start Slip Through", bzw. am Ende "Move Speed Down" und "End Slip Through").
Punkt 1 wird dann wohl eine weitere Graphik brauchen. Sollte auch nicht das Problem sein. Held ein wenig anheben und am besten noch einen Schatten einfügen (solange man sich nicht über unebenes Terrain bewegt, das würde die Sache natürlich sehr viel komplizierter machen...). Wenn du dafür ein zweites Event brauchst: Pech gehabt. Lässt sich dann eben nicht ändern (außer du benutzt eine Battle-Animation, wobei du dann nicht länger als 3,3 Sekunden für deinen Sprung brauchen darfst (wobei das wohl nicht das Problem sein wird). Allerdings werden dadurch natürlich alle Tiles, die über dem Held sein soll, ignoriert.
Sooo, nun zum Code. Der ist ja nicht so das Problem:

Das Event, welches den Helden berühren, und dadurch den Sprung auslösen soll

On Touch (Event|Hero) | Same Level As Hero

<>Change Switch "Sprung zur Mitte" -> ON
<>
Soviel zu deinem Event, welches den Helden berühren soll, damit er zur Mitte springt.
Jetzt ein etwas komplizierteres:

Irgend ein PP/AS (CE oder ME ist egal)

Parallel Process / Auto Start | (Below Hero) | Bedingung: Switch "Sprung zur Mitte" -> ON

<>Change Variable "Mitte X", set [(Mittelpunkt) X-Coord.]
<>Change Variable "Mitte Y", set [(Mittelpunkt) Y-Coord.]
<>
<>Hero Set Walk GFX -> "Held im Sprung"
<>Move Event "(Hero) Move Speed Up ; Start Slip Through"
<>
<>!Lable 1!
<>
<>Change Variable "Held X", set [(Hero) X-Coord.]
<>Change Variable "Held Y", set [(Hero) Y-Coord.]
<>
<>Fork Variable "Held X" > "Mitte X"
<><>Move Event "(Hero) Left"
<>Else:
<>Fork Variable "Held X" < "Mitte X"
<><>Move Event "(Hero) Right"
<>Else:
<>Fork Variable "Held Y" > "Mitte Y"
<><>Move Event "(Hero) Up"
<>Else:
<>Fork Variable "Held Y" < "Mitte Y"
<><>Move Event "(Hero) Down"
<>End:
<>
<>Wait 0,0 secs
<>
<>Fork Variable "Mitte X" = "Held X"
<><>Fork Variable "Mitte Y" = "Held Y"
<><><>Goto !Lable 2!
<><>Else:
<><><>Wait (je nachdem wie schnell der Held jetzt ist, so viel Zeit wie für die Bewegung - (minus) 1x 0,0 secs)
<><><>Goto !Lable 1!
<><>End:
<>Else:
<><>Wait (je nachdem wie schnell der Held jetzt ist, so viel Zeit wie für die Bewegung - (minus) 1x 0,0 secs)
<><>Goto !Lable 1!
<>End:
<>
<>!Lable 2!
<>
<>Move Event "(Hero) Move Speed Down ; Stop Slip Through"
<>Set Hero Walk GFX -> "Held normal"
<>
<>Change Switch "Sprung zur Mitte" -> OFF
<>
So, dabei willst du es aber sicherlich nicht lassen, da der Held sich nun erst auf der X- und dann auf der Y-Achse zum Mittelpunkt bewegt. Etwas schöner (dafür aber auch etwas komplizierter) ist natürlich die schräge Bewegung (bis auf die Abfragen alles wie oben):

Irgend ein PP/AS (CE oder ME ist egal)

Parallel Process / Auto Start | (Below Hero) | Bedingung: Switch "Sprung zur Mitte" -> ON

<>Change Variable "Mitte X", set [(Mittelpunkt) X-Coord.]
<>Change Variable "Mitte Y", set [(Mittelpunkt) Y-Coord.]
<>
<>Hero Set Walk GFX -> "Held im Sprung"
<>Move Event "(Hero) Move Speed Up ; Start Slip Through"
<>
<>!Lable 1!
<>
<>Change Variable "Held X", set [(Hero) X-Coord.]
<>Change Variable "Held Y", set [(Hero) Y-Coord.]
<>
<>Fork Variable "Held X" > "Mitte X"
<><>Fork Variable "Held Y" > "Mitte Y"
<><><>Move Event "(Hero) Left-Up"
<><>Else:
<><>Fork Variable "Held Y" < "Mitte Y"
<><><>Move Event "(Hero) Left-Down"
<><>Else:
<><><>Move Event "(Hero) Left"
<><>End:
<>Else:
<>Fork Variable "Held X" < "Mitte X"
<><>Fork Variable "Held Y" > "Mitte Y"
<><><>Move Event "(Hero) Right-Up"
<><>Else:
<><>Fork Variable "Held Y" < "Mitte Y"
<><><>Move Event "(Hero) Right-Down"
<><>Else:
<><><>Move Event "(Hero) Right"
<><>End:
<>Else:
<>Fork Variable "Held Y" > "Mitte Y"
<><>Move Event "(Hero) Up"
<>Else:
<>Fork Variable "Held Y" < "Mitte Y"
<><>Move Event "(Hero) Down"
<>End:
<>
<>Wait 0,0 secs
<>
<>Fork Variable "Mitte X" = "Held X"
<><>Fork Variable "Mitte Y" = "Held Y"
<><><>Goto !Lable 2!
<><>Else:
<><><>Wait (je nachdem wie schnell der Held jetzt ist, so viel Zeit wie für die Bewegung - (minus) 1x 0,0 secs)
<><><>Goto !Lable 1!
<><>End:
<>Else:
<><>Wait (je nachdem wie schnell der Held jetzt ist, so viel Zeit wie für die Bewegung - (minus) 1x 0,0 secs)
<><>Goto !Lable 1!
<>End:
<>
<>!Lable 2!
<>
<>Move Event "(Hero) Move Speed Down ; Stop Slip Through"
<>Set Hero Walk GFX -> "Held normal"
<>
<>Change Switch "Sprung zur Mitte" -> OFF
<>
Das sollte an sich funktionieren ^^°.

Hoffe es hilft dir ;)

mfg
Phönix Tear