Ist eine Ewigkeit her, dass ich hier was gepostet habe. Aber da mich das Thema so sehr interessiert, erzähl ich mal von meinen Erfahrungen. Aber vorher fange ich mit etwas Eyecandy an. Ich hatte mal geplant Neo23 bei einem Megaman X Fangame auf dem Maker zu helfen und ihm ein auf Pixelmovement basierendes Jump and Run Skript zu erstellen. Fertig geworden ist das zwar nie und wird es wohl auch nicht mehr, aber ich habe hier noch ein Video von damals auf der Platte rumfliegen, das irgendeinen Zwischenstand dokumentiert hat.

>Video<

Dem Anschein nach konnte man bereits Laufen, Springen, Dashen, die Wand runter rutschen und von der Wand abspringen. Ich bin mir ziemlich sicher, dass ich auch schon den Air-Dash irgendwann mal umgesetzt hatte, aber das ist jetzt auch egal.

Als ich angefangen habe daran zu arbeiten, wollte ich, dass man genauso wie bei meinen Tile-Movement Systemen sich mittels Terrain IDs eine Map ganz normal zusammenklicken kann. Wenn man aber Picture-Koordinaten verwendet, kann man die Terrain ID nicht einfach so auslesen, da diese Koordinaten immer den aktuellen Bildausschnitt als Bezugssystem wählen. Das Problem habe ich gelöst, indem ich mir selbst einen Bezugspunkt definiert habe. Ich habe in die obere Linke Ecke der Map ein Event gesetzt, das Nullpunktevent. Wenn ich nun die genaue Position von Megaman abgefragt habe, habe ich einfach die Differenz zwischen den Picture-Koordinaten des Nullpunktevents und den Picture Koordinaten von Megaman gebildet. Diese Differenz geteilt durch 16 entspricht dann genau den Tile-Koordinaten auf denen Megaman gerade steht. Dadurch ließen sich im wesentlichen wieder Terrain IDs nutzen.

Ein zweites Problem bestand im Mitscrollen der Map. Wenn man die Map einfach mit Pan Screen bewegt, behält man die aktuelle Position im Bezug zum Bildausschnitt bei. Man bleibt also nicht in der Bildmitte, sondern wird durch Pan Screen einfach mitgeschoben. Das habe ich gelöst, indem ich bei jedem Schritt, den die Map mitgescrollt ist, die Position von Megaman um 16 Pixel in die entsprechende Richtung verschoben habe, so dass das Picture in der Bildschirmmitte bleibt. Dazu hab ich einen Pan Screen Schritt für den Movement Speed Normal in 8 0,0 Waits unterteilt und nach(oder vor? Weiß ich nicht mehr.) jedem Wait die Position um 2 Pixel korrigiert. Dadurch sieht das ganze flüssig aus und funktioniert wunderbar. Worauf man dabei achten muss, ist diese Positionskorrektur zu deaktivieren, sobald die Map nicht mehr scrollt, also am linken und rechten Bildschirmrand beispielsweise.

Kein Problem ist es meiner Meinung nach, dass Pan Screen nicht pixelgenau funktioniert. So lange man sich flüssig in eine Richtung bewegt, fällt es gar nicht auf. Und wenn man aus welchem Grund auch immer sich wirklich nur langsam Pixel für Pixel fortbewegt, stört es auch nicht wirklich, zumindest mich nicht. Eher problematisch ist, dass man sich dadurch auf bestimmte Bewegungsgeschwindigkeiten reduziert. 2 Pixel (Normal) oder 4 Pixel (2xFaster) pro 0,0 Wait geht, aber 3 Pixel pro 0,0 Wait ist nicht wirklich gut umzusetzen. Man kann natürlich einen Char auch mal um 3 Pixel pro 0,0 Wait bewegen, aber als kontinuierliche Bewegungsgeschwindigkeit ist das nicht geeignet.

Ansonsten konnte ich das meiste völlig analog von meinem Tile-Movement Jump and Run Skript übernehmen. Hier und da gab es noch ein paar Dinge zu beachten, zum Beispiel bei der Landung auf dem Boden: Man muss ja auf dem Bodentile immer wieder auf der gleichen Pixelreihe landen, aber da war die Modulusfunktion mein Freund. Außerdem verändert sich die Geschwindigkeit im Sprung und im Fall. In Y-Richtung bewegt man sich zunächst mit 4 Pixel pro 0,0 Wait, dann 3, dann 2, dann 1 und dann fällt man genauso wieder nach unten. Dadurch ergibt sich eine schöne, rundwirkende Flugbahn und nicht so ein hässliches Dreieck wie bei Tile-Movement. Das muss natürlich alles entsprechend im Sprungevent angepasst werden, aber vom Prinzip her ist es völlig analog zum Tile-Movement.

Nagut, wenn mir noch was einfällt, trag ich es nach. Ich find's cool, dass hier Leute immer noch an Pixelmovement auf den alten Makern rumwerkeln. Vielleicht packt es mich irgendwann auch noch mal.