Sprites schneller bewegen
64'er Ausgabe 4/April 1984, S. 70-71
Daß Sprites nützliche Hilfsmittel nicht nur bei
Spielen sind, ist mittlerweile bekannt. Mit dem hier vorgestellten
Programm lassen sich bis zu acht Sprites mit 255 verschiedenen
Geschwindigkeiten kontinuierlich in acht Richtungen manövrieren.
Das Besondere: Berechnungen im Programm haben keinen Einfluß auf
die Laufgeschwindigkeit der Sprites.
Eine feine Sache ist beim Commodore 64 die Sprite-Grafik. Hat man
ein solches Sprite entwickelt und auf dem Bildschirm dargestellt, so
kann durch Veränderung zweier Speicherstellen das Sprite an eine
andere Position gebracht werden. Um eine fließende Bewegung zu erreichen,
ändert man die Speicherstellen um den Faktor 1. Nun funktioniert das bei
einem einzelnen Sprite noch recht zügig. Möchte man aber mehrere Sprites
bewegen, zwischendurch etwas berechnen und abfragen, ob eine Kollision
zwischen zwei Sprites stattgefunden hat, so werden die Bewegungen doch
recht träge. Um die Bewegungen schneller erscheinen zu lassen, kann man
die Schrittweite erhöhen. Dies hat aber den Nachteil, daß die Sprites
ziemlich "abgehackt" über den Bildschirm laufen. Weiterhin
muß beachtet werden, ob ein Sprite auf der rechten Bildschirmseite
dargestellt werden soll. Ist dies der Fall, so muß im Register 16 das
Bit für das entsprechende Sprite gesetzt werden. Bei der Rückkehr auf
die linke Seite muß das Bit wieder gelöscht werden. Bild 1 zeigt den
Bereich, in dem sich die Sprites bewegen können. Wenn Sie das Programm
SPRITE-MOVE (siehe Listing) benutzen, so sind diese Probleme vorbei.
Sie können ein Sprite nun mit dem Befehl !RUN S,R,G auf die
Reise schicken. Mit dem S geben Sie die Nummer des Sprites an (0-7),
mit R die Richtung (1-9) und mit G die Geschwindigkeit (0-255). In
Bild 2 können Sie sehen, welche Zahl für welche Richtung einzusetzen
ist. Die Zahl 5 kann eingegeben werden, hat aber keinen Einfluß.
Bei der Geschwindigkeit G bedeutet 0 die schnellste und 255 die
langsamste Bewegung. Die Sprites bewegen sich nun immer in der
eingegebenen Geschwindigkeit. Sie können in Ihrem Basic-Programm
berechnen oder abfragen so viel Sie wollen, dem Bewegungsdrang der
Sprites tut dies keinen Abbruch. Verläßt ein Sprite den Bereich, in dem
es sich bewegen kann (siehe Bild 1), so erscheint es wieder auf der
gegenüberliegenden Seite. Wenn Sie dies nicht möchten, so müssen Sie
durch Abfrage der entsprechenden Speicherstellen darauf reagieren.
Anhalten können Sie ein Sprite mit dem Befehl !STOP S.
Aufpassen muß man bei dem Befehl THEN. Zwischen THEN und dem neuen
Befehl muß ein Doppelpunkt stehen, da es sonst zu einem SYNTAX-ERROR
kommt.
Aufbau einer Spritebibliothek
Weiterhin haben Sie die Möglichkeit, ab der Speicherstelle 49900
bis zu 50 Sprites zu speichern und mit dem Befehl !VAL B1,B2
in den Block zu schieben, auf den Ihr Sprite zugreift. B1 kann dabei
Werte von 0 bis 7 annehmen. Und zwar bedeutet:
0 = Block 11 ab Speicherstelle 704
1 = Block 13 ab Speicherstelle 832
2 = Block 14 ab Speicherstelle 896
3 = Block 15 ab Speicherstelle 960
4 = Block 32 ab Speicherstelle 2048
5 = Block 33 ab Speicherstelle 2112
6 = Block 34 ab Speicherstelle 2176
7 = Block 35 ab Speicherstelle 2240
Wenn Sie die Blöcke 32 bis 35 benützen, müssen Sie den Zeiger, der
auf den Beginn des Basic-Programms zeigt, ändern. Mit POKE 2560,0
beginnt Ihr Basic-RAM-Bereich ab Speicherstelle 2561. Anschließend geben
Sie noch NEW ein.
Bringen Sie Bewegung in die Sprites
B2 kann Werte von 0 bis 49 annehmen. Errechnen können Sie die
Anfangsspeicherstelle für B2 mit 49900 + B2 * 63. Sie können sich so
eine ganze Sprite-Bibliothek anlegen und bei Bedarf abrufen. In Bild 3
sehen Sie ein Programm, mit dem Sie die Sprites (die ab Speicherstelle
49900 stehen) zusammen mit dem Programm SPRITE-MOVE auf Kassette
wegspeichern können. Denkbar wäre auch, daß man sich ähnlich aussehende
Sprites speichert und diese abwechselnd einschaltet. Dadurch kann man
den Eindruck einer sich bewegenden Figur erzeugen. (Siehe Beispielprogramm
in Bild 4).
Alle Parameter für die neuen Befehle können Zahlen oder auch Variablen
sein. Außerdem funktionieren die Befehle sowohl im Direktmodus als auch
innerhalb eines Basicprogramms.
Sprites for ever
Das Programm steht von Speicherstelle 49229 bis 49798. Die Speicherstellen
49152 bis 49228 werden vom Programm als Speicher benutzt. Aktiviert werden
die neuen Befehle mit SYS 49700. Im Basic-Lader geschieht dies
in Zeile 172. Sollten Sie die RUN/STOP- und RESTORE-Taste betätigen, so
müssen Sie das Programm neu aktivieren. Und nun viel Spaß mit den neuen,
schnellen Sprites.
(Herbert Kunz)
|