APPLICATIONSPROGRAMMATION ★ SPRITES HAUTNAH (CPC MAGAZIN) ★

Sprites hautnah (CPC Magazin)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

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 Größe der Sprites ist frei-wählbar.
  • Es gibt sechs Möglichkeiten, ein Sprite auf den Bildschirm zu bringen, und fünf Bewegungsarten.
  • Es ist möglich, Sprites vor oder hinter Bildschirmdaten zu bewegen.
  • Bis zu 10 Sprite-Sätze können angesprochen werden. (Zu einem Satz gehören immer die Sprites, welche die gleiche Größe und Position haben, jedoch auf eine andere Quelle zugreifen, z.B. die verschiedenen Bewegungszustände einer laufenden Figur.)
  • Der Bildschirm wird in ein Koordinatensystem von 80 x 200 Sprite-Positionen aufgeteilt. Die linke obere Ecke besitzt die Koordinaten 0,0.

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

  • Verwenden Sie nur Integer-Zahlen.
  • Das Sprite-Paket ist nur zum Teil absturzsicher. (Falsche Quelladressen bei den IN-FRONT- und BEHIND-Befeh-len könnten zum Absturz führen. Das gleiche ist möglich, falls |SET nicht ausgeführt wurde.)
  • Die IN-FRONT- und BEHIND-Kommandos laufen nur im MODE 0, die anderen Befehle dagegen in allen Modi. Das Koordinatensystem bleibt dabei gleich.

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.

Klaus Eberle , CPC Magazin

★ PUBLISHER: CPC Magazin
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1987
★ AUTHOR: Klaus Eberle
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Sprites-Hautnah    (CPC  Magazin)    LISTING    GERMANDATE: 2021-02-02
DL: 215
TYPE: PDF
SiZE: 643Ko
NOTE: 5 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX Ltext (CPC Magazin)
» Applications » Trace (CPC Amstrad International)
» Applications » RSX Befehle ohne »@«
» Applications » RSX Call (Happy Computer)
» Applications » RSX BankSwop (Amstrad Action)
» Applications » Tape Rsxs (The Amstrad User)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 243 millisecondes et consultée 836 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.