★ APPLICATIONS ★ PROGRAMMATION ★ SPRITES HAUTNAH (CPC MAGAZIN) ★ |
Sprites hautnah (CPC Magazin) | Applications Programmation |
Bei vielen Sprite-Programmen, die man in diversen Zeitschriften findet, ist man leider eher enttäuscht von dem, was sich auf dem Bildschirm abspielt. Teilweise sind die Programme zwar universell, aber zu langsam. Dann gibt es wieder solche, die zwar schnell sind, bei denen man aber nicht einmal die Sprite-Größe wählen kann. Hinzu kommt die Sache mit dem Hintergrund. Manche Sprites löschen alles, was ihnen im Wege steht. Andere werden mit XOR verknüpft; wenn der Hintergrund iedoch komplexer und bunter ist, erkennt man nur noch einen farbigen Mischmasch. Manche Programme stellen zwar den Hintergrund wieder her, aber sie löschen ihn zuvor vollständig, was bei einem aufwendigen nicht besonders elegant aussieht. Mit diesem Sprite-Paket kann man selbstverständlich alle genannten Bewegungsarten erzeugen und noch mehr. Außerdem läßt sich damit etwas verwirklichen, was sonst nur mit teuren Programmen wie Laser-Basic möglich ist, nämlich die Bewegung von Sprites vor oder hinter Bildschirmdaten! Jeder, der übenwiegend in Basic programmiert, konnte bisher davon nur träumen. Das Sprite-Paket besitzt folgende Merkmale:
Die 14 RSX-Befehle |INIT Dieses Kommando muß einmal zu Anfang aufgerufen werden, bevor sich die anderen Befehle einsetzen lassen. |SET,n Wählt einen Sprite-Satz aus, damit der Computer weiß, welche Position und welche Größe das Sprite besitzt. Werte von 0 bis 9 sind zugelassen; ansonsten wird eine Fehlermeldung ausgegeben. Alle Anweisungen beziehen sich immer auf das aktuelle Sprite, das durch |SET,n angesprochen wird. Zuvor sollte man erst ein Sprite durch |SET,n auswählen. Falls die Funktion RND ausgeführt wurde, muß dies sogar geschehen. |DEFSPR, Quelladresse. x-Breite in Bytes, v-Höhe in Feinzeilen Dieser Befehl definiert das durch |SET,n angesprochene Sprite. Dessen Größe wird dabei festgelegt. |GETSPR, Zieladresse. x-Position, y-Position Mit diesem Kommando kann man ein Sprite vom Bildschirm holen. Die Größe wurde durch |DEFSPR festgelegt und durch |SET angewählt. Die Zieladresse im |GETSPR-Befehl ist dann in der Regel gleich der Quelladresse in der |DEFSPR-Anweisung. Mit |GETSPR kann man auch zuerst ein Sprite mit PLOT zeichnen und dann einfach im RAM ab-legen. |IFPUT,Quelle.x.y Ein Sprite, das ab Quelle steht, kommt vor (!) Bildschirmdaten. Der Hintergrund wird hinter ihm zwischengespeichert, d.h., hinter dem Sprite muß genausoviel Platz vorhanden sein, wie dieses selbst beansprucht. |BHPUT, Quelle,x,y Hier wird ein Sprite hinter (!) Bildschirmdaten gesetzt. Ansonsten gilt das gleiche wie für |IFPUT. |XPUT,Quelle,x,y Bei diesem und den folgenden Befehlen wird der Hintergrund nicht zwischengespeichert (bezieht sich auf die folgenden PUT-Kommandos). Ein Sprite, das ab Quelle steht und dessen Größe durch |DEFSPR festgelegt wurde, kommt auf den Bildschirm. Bild- und Sprite-Daten werden mit XOR verknüpft. |FPUT, Quelle,x,y Wie |XPUT, doch werden hier alle Punkte gesetzt (Force). Wenn man um das Sprite einen Rand aus INK 0 legt, der mindestens so groß ist wie die Erhöhung in x- bzw. y-Richtung, kann man damit eine noch schnellere Bewegung erzielen. |APUT, Quelle,x,y Wie IFPUT, nur erfolgt eine AND-Verknüpfung zwischen Sprite- und Bilddaten. |OPUT, Quelle,x,y Wie |FPUT, nur werden Sprite- und Bilddaten OR-verknüpft. |IFMOVE, Quelle,x,y Ein durch |IFPUT auf den Bildschirm gebrachtes Sprite wird gelöscht und an der neuen Position ausgegeben, der Hintergrund wiederhergestellt. Letzterer wurde hinter dem Sprite abgespeichert, dessen Definition bei |DEFSPR erfolgt. Die Quelle bei |IFPUT muß nicht mit der bei |DEFSPR übereinstimmen. Durch Wechseln der Quelle kann man sehr einfach Bewegungsabläufe erzeugen. Das gewählte Set bleibt dabei gleich. |BHMOVE ,Quelle,x,y Wie |IFMOVE, nur Bewegung hinter Bildschirmdaten. |XMOVE ,Quelle,x,y Ein durch |XPUT auf den Bildschirm gebrachtes Sprite wird durch XOR gelöscht und an der neuen Position ausgegeben. Der Hintergrund bleibt erhalten. |FMOVE, Quelle,x,y Ein durch |FPUT auf den Bildschirm gebrachtes Sprite wird mit INK 0 gelöscht und an der neuen Position ausgegeben. Anmerkungen
Falls Ihnen noch nicht alles klar ist, sollten Sie sich am besten einmal die Demo anschauen, denn dort werden einige Techniken deutlich. Wer etwas Phantasie aufbringt, wird mit diesen Sprites bestimmt gute Spiele schreiben. Man kann aber z.B. auch eine sehr schöne Menüsteuerung erzeugen, welche die Bedienungsfreundlichkeit erheblich steigert. Organisation der Sprites Die Bytes sind zeilenweise abgelegt, und zwar von links nach rechts. Es folgen also zuerst die der 1. Feinzeile, dann die der 2. usw. Wenn man also ein Sprite erzeugt, das die Größe des Cursors im MODE0 besitzt, findet man im RAM zuerst die 4 Bytes der 1. Feinzeile, darauf die 4 der 2. usw. bis zur 8. Feinzeile. Länge oder Größe werden nicht mitab-gespeichert. Die Festlegung der Größe geschieht einfach mit |DEFSPR. Für das genannte Beispiel würde dies z. B. so aussehen: |SET, (ein Wert von 0 bis 9) |DEFSPR, Quelladresse,4,8 Die Quelladresse im |DEFSPR-Befehl wird lediglich dazu verwendet, um einen Zeiger auf das Ende des Sprites zu errechnen, damit das Programm bei den IN-FRONT- und BEHIND-Befehlen weiß, wo der Hintergrund abgespeichert wird (direkt hinter dem Sprite). Dieser entspricht der Größe des Sprites und wird auch genauso im RAM abgelegt.
|