RSPPOS
RSPPOS | |
Syntax: | RSPPOS(<Sprite>, <n>) |
Parameter | |
<Sprite>: numerischer Ausdruck im Wertebereich von 1 bis 8 | |
<n>: numerischer Ausdruck im Wertebereich von 0 bis 2 | |
Einordnung | |
Typ: | numerische Funktion |
Kontext: | Sprites |
Aufgabe: | Position und Geschwindigkeit eines Sprites ermitteln |
Abkürzung: | rS |
Token: | $ce $05 (206 5) |
Verwandte Befehle | |
COLLISION, MOVSPR, RSPRITE, SPRITE |
Anmerkung: Dieser Artikel beschreibt die BASIC-Funktion RSPPOS ab Commodore BASIC V7.0 oder höher.
Die Funktion RSPPOS dient dazu, Position und Geschwindigkeit eines Sprites abzufragen.
Die Parameter haben folgende Bedeutung:
- <Sprite>: Nummer des Sprites, dessen Position abgefragt wird. Dieser Wert darf zwischen 1 und 8 liegen, andere Werte verursachen einen Abbruch mit der Fehlermeldung ?ILLEGAL QUANTITY ERROR. Fehlt der Parameter wird ?SYNTAX ERROR ausgegeben, bei einer Zeichenkette als Parameter dagegen ?TYPE MISMATCH ERROR.
- <n>: Dieser Parameter gibt an, welcher sprite-spezifischer Wert ermittelt werden soll und kann folgende Werte annehmen:
- 0: X-Koordinate (horizontale Position) des Sprites abfragen; das Ergebnis kann zwischen 0 und 511 liegen.
- 1: Y-Koordinate (vertikale Position) des Sprites abfragen; das Ergebnis kann zwischen 0 und 255 liegen.
- 2: Geschwindigkeit des Sprites ermitteln; das Ergebnis kann zwischen 0 und 15 liegen.
Der Bewegungswinkel eines Sprites kann nicht abgefragt werden (allerdings errechnet, siehe Beispiele).
Beispiele[Bearbeiten | Quelltext bearbeiten]
IF RSPPOS(1,0)>343 THEN MOVSPR 1,0,+0
Ist die horizontale Position von Sprite 1 größer als 343 (Sprite befindet sich vollständig im rechten Rahmenbereich), wird es an die X-Koordinate 0 bewegt. Die vertikale Position bleibt unverändert.
V=RSPPOS(1,2):IF V<15 THEN MOVSPR 1,A#V+1
Speichert die Geschwindigkeit von Sprite 1 in der Variablen V und erhöht sie dann (sofern der Maximalwert noch nicht erreicht wurde) um 1. Da der Bewegungswinkel nicht direkt abgefragt werden kann (siehe folgendes Beispiel), ist dieser in der Variablen A (für Angle) hinterlegt.
Winkelermittlung
100 GRAPHIC 1,1 : REM HIRES 110 REM SPRITE ERZEUGEN (GROSSES X) 120 DRAW 1, 0,0 TO 23,20 121 DRAW 1, 0,20 TO 23,0 130 S=1 : REM SPRITE-NUMMER 140 SSHAPE A$, 0,0,23,20 150 SPRSAV A$,S 160 SPRITE S,1,8,0,0,0,0 170 MOVSPR S,21,50 1000 GRAPHIC 0 : REM WIEDER TEXTMODUS 1010 PRINT "{clr}" 1020 AO=315 : REM ANGLE ORIGINAL 1030 V=3 : REM SPRITE-GESCHWINDIGKEIT 1100 MOVSPR S,AO#V 1110 XL=RSPPOS(S,0) 1120 YL=RSPPOS(S,1) 1200 DO 1210 X=RSPPOS(S,0):Y=RSPPOS(S,1) 1230 DX=XL-X:IF ABS(DX)>100 THEN DX=DX-512*SGN(DX) : REM BEREICHSUEBERLAUF X 1240 DY=Y-YL:IF ABS(DY)>100 THEN DY=DY-256*SGN(DY) : REM BEREICHSUEBERLAUF Y 1250 IF DY=0 THEN DY=1E-30 : REM DIVISION DURCH 0 VERMEIDEN 1260 A=INT(ATN(DX/DY)*180/π+.5) : REM WINKEL ERMITTELN UND UMRECHNEN 1265 A=A-180*(A<0)-180*(DX>=0): REM WINKEL VON -90 BIS 90 AUF 0-360 ABBILDEN 1270 XL=X:YL=Y : REM ALTE (LAST) POSITION MERKEN 1280 PRINT ".WINKEL: GESETZT="AO;"{left} GEMESSEN="A"{left} " 1290 GET A$:IF A$="" THEN LOOP : REM TASTENABFRAGE FUER WINKEL 1300 IF A$="{left}" AND AO>=5 THEN AO=AO-5 1310 IF A$="{right}" AND AO<=355 THEN AO=AO+5: IF AO=360 THEN AO=0 1320 MOVSPR S,AO#V : REM SPRITE-RICHTUNG NEU SETZEN 1390 LOOP
Ein Sprite wird aus einer Hires-Grafik erzeugt (gelbes "X") und in Bewegung gesetzt. In einer Schleife wird durch Differenzermittlung der Sprite-Position der Winkel mittels Arcustangens-Funktion ATN() ermittelt und für die laufende Anzeige als Wert in Grad korrespondierend zum Angle-Parameter von MOVSPR aufbereitet.
Der Sprite-Winkel kann interaktiv mit den CRSR -Tasten "links" und "rechts" in 5er-Schritten verkleinert bzw. vergrößert werden.
Die Differenzermittlung berücksichtigt den Wertebereichsübergang von RSPPOS (selbst bei Geschwindigkeit 15). Die ATN-Funktion ist zum einen ziemlich rechenintensiv und liefert an sich nur Winkel von -90 bis +90 Grad, was noch einer weiterer Aufbereitung bedarf.
APPEND | BANK | BEGIN | BEND | BLOAD | BOOT | BSAVE | BUMP | CATALOG | COLLISION | COLOR | CONCAT | DCLEAR | DCLOSE | DOPEN | DVERIFY | ENVELOPE | FAST | FETCH | FILTER | GO64 | MOVSPR | (OFF) | PEN | PLAY | POINTER | POT | (QUIT) | RECORD | RREG | RSPCOLOR | RSPPOS | RSPRITE | RWINDOW | SLEEP | SLOW | SOUND | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | STASH | SWAP | TEMPO | WIDTH | WINDOW | XOR