Bei den Move Events sollte es unter der Anzeige wo deine eingegebene Bewegung steht ein Feld sein bei dem man "Ignore if can't be moved" mit einem Haken versehen kann. Den hinmachen und fertig
Außerdem solltest du besser nicht auf "On Hero Touch", sondern "On Touch Hero / Event" einstellen und den Block (es sind keine Kisten -.-) auf "Same Level as Hero" einstellen. Das wirkt viel besser
mfg
Phönix Tear
Edit:
Ich editiere hier gleich noch einen vernünftigen Zeldamäßigen Steinschiebecode rein...
Edit 2:
So, da es ja allem Anschein nach bei deinem Projekt um ein Zelda Fanfic geht, möchte ich bei der Gelegenheit gleich einen vernünftigen Schiebecode beifügen. Wie du sicherlich gemerkt hast dauert es bei Zelda immer einen kurzen Moment den man gegen die Steine gegen laufen muss, bevor sie verschoben werden. Dies kann man im Maker natürlich auch umsetzen. Ich weiß nicht genau ob es an meiner Funktastatur liegt, aber manchmal gibt es mit diesem Code kurzzeitig Probleme, aber egal. Probier es am besten einfach selber aus.
Was braucht man für diesen Code? 3 Variablen und 2 Label (ich kann nicht sagen ob dies der einfachste Code ist, aber er funktioniert immerhin ).
Legen wir gleich los. Du brauchst auch nur das Steinevent, welches selbstverständlich kopierbar ist (ich nenne es im Folgenden auch weiterhin nicht mehr Block, sondern Stein, da ich es einfacher finde und es ebenfalls passt (aber "Kiste", nya :P )).
Die einzelnen Codeabschnitte sind jeweils durch eine freie Zeile voneinander abgetrennt.
So, jetzt aber: Was zur Hölle macht der Code???
Dazu werde ich ihn wieder auseinander nehmen.
Sinn abschnitt 1:
Die Variable "Steinzähler" (ich weiß, der Name mag etwas ungenau sein ) soll die Zeit zählen, in der der Spieler gegen den stein "drückt". Dies macht der folgende Code. Damit man den Stein aber kopieren kann muss diese Variable am Anfang immer auf 0 gesetzt werden, da man sonst Schiebezeit "horten" könnte (man könnte somit bei Stein 1 anfangen zu drücken (eine halbe Sekunde) und würde dann Stein 2 auch nur noch eine halbe Sekunde drücken müssen, selbst wenn die eigentliche "Drückzeit" eine ganze Sekunde wäre...). Nun aber zum
Sinn abschnitt 2:
Wenn du mal mit "Enter Password" gearbeitet hast, dürfte dies nichts neues für dich sein. Aber ich erkläre es zur Sicherheit einfach mal ^^:
Der "Enter Password"-Befehl speichert, ob der Spieler eine von 6 Tasten gedrückt hat (die 4 Pfeiltasten + Leertaste / Enter + Escape). Diese werden als Zahlen in eine vom Makerer angebbare Variable eingespeichert. Dies geschieht in folgender Form:
Da ich im folgenden Code einen solchen "Enter Password"-Befehl verwende, mit dem ich abfragen will in welche Richtung der Spieler drückt, liegt es nahe bei der Vergabe der Zahlen für die Face-Richtung (Blickrichtung) des Helden eine gleiche Formatierung (falls man das hier so sagen darf ^^°) zu wählen. Dazu aber im nächsten
Sinn abschnitt 3:
Erinnern wir uns erst nochmal was wir bis jetzt, außerhalb der Lable Schleife gamcht haben:
Wir haben die "Steinzähler" Variable auf 0 gesetzt und wir haben die Blickrichtung des Helden mittels Fork-Conditions abgefragt und als Zahlen von 1 bis 4 in die Variable "Held Facerichung" eingespeichert.
Nun wird diese Variable gebraucht. Dazu sollte ich aber erst nochmal genauer erläutern was wir eigentlich machen wollen:
Das Ziel ist es ja, ein Event zu schaffen, welches selbstständig überprüft ob der Held gegen es drückt und wenn ja soll es eine gewisse Zeit lang gegen sich drücken lassen und dann nachgeben und verschoben werden. Von welcher Richtung aus der Held gegen das Event drückt haben wir bereits oberhalb der Schleife festgestellt und eingespeichert. Jetzt müssen wir nur noch überprüfen ob der Spieler dies auch weiter tut / tun will.
Dazu haben wir mit einem Lable eine Schleife gebastelt. Am Anfang der Schleife steht ein "Enter Password"-Befehl der die Pfeiltasten kontrolliert. Sollte der Spieler nun also weiterhin gegen den Stein drücken muss die Pfeiltaste die er drückt mit der Blickrichtung des Helden übereinstimmen, da er ja im Grunde genommen in die gleiche Richtung "weiterlaufen" will. Die Blickrichtung des Helden haben wir bereits, den Pfeiltaste welche gedrückt wird fragen wir gerade ab. Damit wir dies einfacher vergleichen können habe ich wie oben erwähnt die Blickrichtung genau so als Zahlen gespeichert wie der "Enter Password"-Befehl es mit den Pfeiltasten auch macht. Nochmal zur Erinnerung:
Beide Speicherungen gleichen sich. Von daher muss ich also nur noch überprüfen ob beide Variablen gleich sind, also der Spieler in die selbe Richtung drückt in die der Held schaute als er gegen den Stein lief.
Das macht die Fork Condition im Code.
Sollte dies der Fall sein wird die "Steinzähler" Variable (genauer: Der Wert der "Steinzähler" Variable) um 1 erhöht. Sollte diesem nicht so sein wird die "Steinzähler" Variable auf 0 zurück gesetzt (könnte man sich evtl auch sparen, ich mach es zur Sicherheit trotzdem immer) und zum Lable 2 gesprungen, welcher das Ende des Events darstellt. Dadurch entkommen wir auch der Schleife.
Ist die obere Fork Condition überwunden und die Bedingung erfüllt (sonst wird ja zum Lable 2 gesprungen) wartet der Maker 0,0 Sekunden (6x 0,0 Sekunden = 0,1 Sekunde) und springt dann zum Lable 1, also zum Anfang der Schleife, um erneut zu prüfen ob der Spieler immer noch in die selbe Richtung drückt.
Damit dies aber nicht ewig so weitergeht muss der "Goto Lable"-Befehl in eine weitere Fork eingepackt werden, welche den Stand der "Steinzähler" Variable kontrolliert. Hier kannst du einen beliebigen Wert wählen, je nachdem wie lange man drücken soll bis sich der Stein verschiebt. 30 erschien mir dabei sehr passend...
Sollte die "Steinzähler" Variable noch kleiner als 30 sein wird, wie oben gesagt, zum Lable 1 gesprungen und weiter gewartet, bzw. kontrolliert.
Ist aber 30 erreicht kommt es zu einem "Move Event". In diesem "Move Event" spielt der Stein einen Verschiebesound (z.B. "Earth 4") und verschiebt sich selbst. Dabei muss natürlich "Ignore if can't be moved" aktiviert sein.
Damit bist du auch schon fast fertig. Nun wird der Lable 2 erreicht.
Da wir am Anfang die Heldengraphik geändert haben, müssen wir dies zum Ende des Codes natürlich wieder rückgängig machen. Also ändern wir die Heldengraphik entsprechend und haben erfolgreich ein Event erstellt welches sich nach einer halben Sekunde drücken um ein Feld vom Held weg verschiebt .
Ich hoffe Code und Erläuterung sind einigermaßen verständlich und dein Zelda Game rückt dadurch einen Schritt näher an das Original.
mfg
Phönix Tear
Geändert von Phönix Tear (25.12.2006 um 20:26 Uhr)