Landung 005

Für diesen Beitrag wurde das CBM prg Studio verwendet.
weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

CBM prg StudioDas Schiff bewegen

Langsam ist es an der Zeit, dass wir etwas Bewegung ins Spiel bringen. Beginnen wir damit das Schiff mit dem Joystick zu steuern und die Düsen unter Feuer zusetzen.

Da wir den Level erstmal als eigenständiges Spiel entwickeln, setzen wir den Joystick fest auf einen Port. Später kann der gewählte Joystick z. B. über die Zero-Page, von einem ‚Modul‚ ans nächste übergeben werden.

Fügen wir daher an den Beginn unseres Programms, die folgenden zwei Zeilen hinzu (die neuen Zeilen sind gelb hervorgehoben):

 

Das Auslesen des Joysticks übernehmen wir vom Puzzle und fügen die bekannte Funktion einfach hinter  draw_canyon: hinzu.


Da wir uns den aktuellen Status des Joysticks in InputState: merken, fügt diese Variable hinter SpaceshipPos: ein.

 

Jetzt benötigen wir natürlich noch eine Funktion, die die Joystickeingabe verarbeitet. Wir begnügen uns zunächst damit, dass Raumschiff direkt zu bewegen. Es gibt noch kiene Beschleunigung oder Anziehungskraft. Beginnen wir mit der nächste Routine hinter joystickInput: ein.

Als erstes holen wir uns die sichtbaren Sprites in den Akku und deaktivieren die drei Sprites für die Feuerschübe. Da wir den Akku gleich brauchen, merken wir uns den eben ermittelten Wert im X-Register.

 

Dann springen wir zur Leseroutine für den Joystick und erhalten so im Akku den aktuellen Status. Da wir nur die unteren 5-BITs benötigen, blenden wir die oberen aus. Die Eingabe ist bekanntermaßen low-aktiv, also kehren wir diese wieder um (somit zeigt eine 1 wieder an, dass eine Eingabe vorliegt).

 

Wir benutzen diesmal die Shift-Befehle, um die Eingabe zu überprüfen. Da wir rauf / runter Bewegungen des Joysticks nicht benötigen, verwerfen wir diese einfach durch zwei LSR-Befehle. Der nächste Shift-Befehl prüft, ob der Joystick nach links gedrückt wurde. Schaut euch ggf. nochmal die Grafik der Tastatur-Matrix & Joysticks an. Wie ihr seht, zeigen die beiden unteren BITs an, ob rauf oder runter betätigt wurde. In BIT 2 (denkt dran es ist das dritte, da die Zählung mit 0 beginnt!) finden wir die Eingabe für links. Durch die LSR-Befehle wandert das jeweilige ‚Richtungs-BIT‚ ins Carry-Flag und wir können mit BCC prüfen, ob der Joystick in diese Richtung gedrückt wurde, oder nicht. Ist das C-Flag hier gelöscht, dann springen wir direkt zu Prüfung, ob der Stick nach rechts gedrückt wurde. Falls das Carry-Flag aber gesetzt ist, wurde der Joystick nach links gedrückt und wir müssen die Eingabe verarbeiten. Dazu wird der Akku (hier stehen ja die Joystickeingaben, die wir gleich wieder brauchen) ins Y-Reg. kopiert. Dann holen wir die aktiven Sprites aus dem X-Register in den Akku und schalten den Feuerschub an der rechten Raumschiffseite sichtbar. Es ist klar, dass der Schub von rechts erfolgen muss, wenn sich das Schiff nach links bewegen soll. Jetzt kopieren wir den Akku zurück ins X-Register und holen die im Y-Reg. gemerkte Joystickeingabe wieder in den Akku zurück. Abschließend wird noch die X-Position des Schiffs um eins verringert und das Programm läuft weiter zur Prüfung, ob der Stick nach rechts gedrückt wurde. Das mag man jetzt als unnötig erachten, da man den Joystick normalerweise nicht gleichzeitig nach rechts und links drücken kann, aber da wir mit Verschiebe-Befehlen arbeiten müssen wir auf jeden Fall ein LSR ausführen. Das kann dann auch die normale Prüfung für ‚rechts‚ erledigen.

 

Die Prüfung, ob der Stick nach rechts gedrückt wurde unterscheidet sich nicht wirklich von der eben. Sie sollte daher kein Problem für euch darstellen.

 

Den Feuerknopf benutzen wir, um die untere Schubdüse zu aktivieren. Da dies die letzte Prüfung ist, brauchen wir die Joystickeingabe im Akku danach nicht mehr und wir können bei einem gedrückten Feuerknopf direkt die sichtbaren Sprites in den Akku holen. Wir müssen den Akku aber für das Ende der Funktion wieder ins X-Register kopieren. Außerdem erhöhen wir die Y-Position des Schiffes um eins. Dann geht es automatisch zum Ende der Funktion.

 

Bevor wir die Routine mit RTS verlassen, schreiben wir die im X-Register gespeicherten sichtbaren Sprites wieder ins Register 21 ( $D015) des VIC-II.

 

Damit unsere Bewegungen nicht zu schnell ablaufen, müssen wir die diese noch ‚timen‚. Warum benutzen wir nicht einfach den Rasterzeileninterrupt? Fügen wir ans Ende der zweiten Raster-IRQ-Funktion (direkt vor  doRasterIRQ_Exit:) die folgenden beiden Zeilen ein:

 

Nun ist der Zeitpunkt gekommen, das Programm zu testen. Ihr könnt das Schiff bewegen und die Düsen werden, je nach Richtung, auch unter Feuer gesetzt. Natürlich ist es so noch recht langweilig, das Schiff zu steuern, aber das ändern wir im nächsten Beitrag.

 

Tearing

Es gibt allerdings noch ein kleines Problem, um das wir uns kümmern sollten. Achtet mal auf den oberen Teil des Schiffes, wenn ihr es direkt unter dem Lasernetz nach links oder rechts bewegt, kommt es zum unschönen Tearing! Das sollte euch nicht verwundern, immerhin haben wir den Aufruf für die Joystickabfrage  checkinput: und das Positionieren der Sprites updatesprites: direkt ans Ende unserer Raster-Routine für den Laser gesetzt. Der Rasterstrahl ist also genau unter dem Laser und wir bewegen die Sprites. Wir sollten die Bewegung an eine andere Stelle verfrachten, wo sie sich nicht mit dem Rasterstrahl in die Quere kommt. Wie wäre es mit dem ersten Rasterinterrupt, der für den Himmel zuständig ist? Dann befindet sich der Strahl im Rahmen und unser Sprite kommt erst viel später. Kopiert die Zeile jsr updatesprites:  einfach in die erste IRQ-Routine lander_IRQ: vors jmp doRasterIRQ_Exit:.

Startet nun das Programm und das Tearing ist verschwunden.

Love_2_5_1

 

Dass der Laser aus dem Tritt kommt, sobald sich das Sprite weiter nach oben bewegt, soll uns (wie bereits erwähnt) nicht weiter interessieren. Später wird das Landungsschiff schließlich zerstört, falls es den Laser berührt.


Im nächsten Beitrag fügen wir dann etwas Physik hinzu, so ist das Spiel langsam Form annimmt.

 

Start im Java-Emulator

 


Schrott!!Naja...Geht so...Ganz gut...SUPER! (4 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück | weiter >>>

 

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

Schreibe einen Kommentar


Beachtet bitte, dass ich eure Kommentare erst manuell freigegeben muß, bevor sie auf der Seite erscheinen! Da ich nicht pausenlos am Rechner sitze, kann es schon mal etwas dauern, bis ein Kommentar für alle sichtbar ist.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam