RLOCMOB

Aus C64-Wiki
Wechseln zu: Navigation, Suche
RLOCMOB
Format: RLOCMOB <n>, <zx>, <zy>, <gr>, <sp>
Parameter
n: 0..7 (Spritenummer)
zx: 0..511 (Zielkoordinate x)
zy: 0..255 (Zielkoordinate y)
gr: 0..3 (Spritegröße)
sp: 0..255 (Spritegeschwindigkeit)
Einordnung
Typ: Anweisung
Kontext: Sprites
Aufgabe: Sprite steuern
Abkürzung: keine
Verwandte Befehle
MMOB - MOB OFF - CHECK - DETECT


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort RLOCMOB.

Typ: Anweisung
Syntax: RLOCMOB <n>, <zx>, <zy>, <gr>, <sp>

Die Koordinaten für Sprites stimmen nicht mit denen für die Grafik überein. Die Fläche, auf der sich Sprites bewegen können, ist viel größer als die Grafik- bzw. Textfläche. Diese ist so auf dem Spritebereich angeordnet, dass ein normal dargestelltes Sprite auf allen Seiten hinter dem Bildschirmrahmen verschwinden kann. Insgesamt überstreicht der Spritebereich eine Fläche von 512x256 Pixeln. Der Grafik-/Textbereich darin (der 320x200 Pixel umfasst) beginnt bei der Koordinate x = 24 und y = 50 (für die linke obere Ecke des Sprites).

Mit RLOCMOB bewegt man das Sprite mit der Nummer <n> von seiner letzten Koordinate zu einem Zielpunkt mit den Koordinaten <zx>/<zy>. Ansonsten funktioniert dieser Befehl genau wie MMOB (weitere Informationen s. dort)

Beachten: Nur die Werte für die Y-Koordinate und für die Geschwindigkeit werden auf Plausibilität überprüft und erzeugen einen ?ILLEGAL QUANTITY ERROR bei Überschreitung der Höchstmarken. Wird die Spritenummer zu groß gewählt, reagiert Simons' Basic mit unvorhersehbaren Anzeigen (Bildschirmflackern, Spriteflackern o.ä.) Für die X-Koordinate werden Werte bis 65535 akzeptiert (und auch abgearbeitet!) Werte größer als 3 bei der Anzeigegröße wirken alle wie der Wert 3.

Sprites mit RLOCMOB anzeigen und bewegen
Beispiel: 

1800 PROC edit
1810   EXEC sprite
1815   kt$="{left arrow}{crsr right}{crsr left}{crsr down}{crsr up}":
       lg=0
1820   REPEAT :
         EXEC eingabe
1825     IF x$="" THEN EXEC flip
1830     IF x$="{crsr down}" THEN z8=z8+16:
           IF z8>64+16*ch THEN z8=64+16*ch
1840     IF x$="{crsr up}" THEN z8=z8-16:
           IF z8<80 THEN z8=80
1850     IF x$="{crsr right}" THEN s8=s8+16:
           IF s8>22+16*cb THEN s8=22+16*cb
1860     IF x$="{crsr left}" THEN s8=s8-16:
           IF s8<38 THEN s8=38
1865     RLOCMOB 1,s8,z8,0,0
1870   UNTIL x$="{left arrow}"
1880   MOB OFF 1
1890 END PROC 

Kommentar: Der Prozeduraufruf "EXEC sprite" in Zeile 1810 definiert das Sprite (s. MMOB). Der 
Aufruf "eingabe" fragt die Tastatur ab und liefert den Tastendruck in x$ zurück. Die Prozedur
"flip" dient hier dazu, ein Blindfeld in das Kreuzworträtsel einzufügen bzw. dieses wieder
zu entfernen. Drücken der Cursortasten bewegt das Sprite in die entsprechende Richtung, und
zwar immer 16 Pixel (zwei Zeichen) weiter (um die Kreuzwortlinien zu überspringen). Mit Drücken 
des Linkspfeils wird die Eingabeschleife beendet und das Sprite ausgeschaltet.