★ APPLICATIONS ★ DIVERS ★ Sprites für die CPC's ★![]() |
Spriter (CPC Amstrad International) | Applications Divers |
Mit Spriter ist es möglich, übergroße, selbstdefinierte Zeichen (Sprites) problemlos und schnell zu definieren und auf dem Bildschirm darzustellen und wer möchte, kann sich das ganze noch auf den Drucker ausgeben lassen. Da das Bewegen von mehrfarbigen und komplexen Zeichen, z.B. ein Auto oder ein Skifahrer, beim CPC vom BASIC aus, sehr kompliziert und langsam ist, wurde dieses Programm in Maschinensprache geschrieben. Spriter kann bis zu 8 Sprites gleichzeitig auf dem Bildschirm darstellen und dies in jedem Bildschirm-Mode. Auch um den Hintergrund braucht man sich keine Sorgen machen, da dieser vor der Ausgabe eines Sprites gerettet und nach dem Entfernen des Sprites wieder ausgegeben wird. Wie schon erwähnt, können Sie mit Spriter übergroße Zeichen problemlos und schnell darstellen. Dies geht natürlich nicht ohne vorher einige Parameter in den Speicher übergeben zu haben. Eine vollständige Speicherbelegung finden Sie in Abb.2. Daß so ein Sprite nicht aus dem Nichts kommen kann, dürfte eigentlich jedem klar sein. Aus diesem Grund müssen Sie vorher an einer beliebigen Stelle im Speicher einen Datenblock ab-legen, der die notwendigen Informationen zum Sprite enthält. Dieser Datenblock wird wie folgt aufgebaut: Zunächst überlegen Sie sich wie groß das Sprite sein sollte, z.B. 4 Zeichen in horizontaler Richtung (Breite) und 8 Zeichen in vertikaler Richtung (Höhe). Die Breite darf maximal 8 Zeichen betragen und wird durch POKE &AB73 übergeben. Die Höhe kann bis zu 32 Zeichen betragen und wird in Adresse & AB74 abgelegt. Doch nun zum Erstellen des Datenblocks. Abb. 1 zeigt die Matrix eines Sprites. Bit = 0 1 0 0 1 0 0 1 Wert = 2↑6 + 2↑3 + 2↑0 Dieser Wert ist der erste Ihres Datenblockes der, nehmen wir mal an, ab Adresse &9600 im Speicher stehen soll. Byte 2 kommt dann in &9601, Byte 3 in &9602 , usw. Nun muß noch der Zeiger auf den Anfang des Datenblocks gesetzt werden. Diese Zeiger stehen von &AB30 bis &AB3F im Speicher. Angenommen, Ihr Sprite hätte die Nr. 0, so müßten Sie die Blockadresse in &AB30 und &AB31 ablegen. In &AB30 kommt das LOW-Byte, in &AB31 das HIGH-Byte der Blockadresse. Hätte Ihr Sprite die Nr. 1, so wären die Adressen &AB32 und &AB33, usw. Durch dieses Verfahren ist es leicht möglich, während eines Spieles das Sprite zu verändern, indem man einfach einen Zeiger auf einen anderen Datenblock ablegt. Als nächstes müssen Sie das Sprite-Aktivierungs-Byte setzen. Dies wird wie folgt gemacht: POKE &AB70,2 Wollen Sie mehrere Sprites darstellen, so können Sie sie durch POKE &AB70, 2^ (1. Spritenummer) + 2^ (2,Spritenummer) usw. erreichen. Die bis jetzt besprochenen Vorgänge müssen Sie nur einmal am Anfang des Programms ausführen. Der letzte Schritt ist das Übergeben der Sprite-Position. Sie kann in X-Richtung (Horizontale) bis zu 703 betragen, wobei die Positionen 0 — 63 außerhalb vom Bildschirm liegen und dadurch eine teilweise Darstellung des Sprites erreicht wird. Allerdings verschiebt sich das Sprite nur, wenn Sie die Position um 8 verändern; innerhalb des Bildschirms genügt eine Erhöhung von 1 bis 4 (je nach MODE). Außerdem müssen Sie darauf achten, daß ein Teil vom Sprite sichtbar bleibt. Tun Sie das nicht, so kann es zum Absturz kommen. Ein Sprite von z.B. der Breite 6 belegt 48 Bits in XRichtung, die x-Position muß mindestens 24 betragen, weil 64 - 48 + 8 - 24, und darf höchstens 688 betragen, weil 640 + 48 = 688. Die Position kann in Y-Richtung bis zu 231 betragen, wobei hier die Positionen 0 - 31 außerhalb vom Bildschirm liegen. Auch bei der Y-Position sollten Sie beachten, daß ein Teil vom Sprite sichtbar bleibt (minimale Pos. = 34 - Höhe). Die Adressen für Sprite 0 betragen &AB40 für das LOW-Byte und &AB41 für das HIGH-Byte der X-Position; &AB42 für die Y-Position. Beim Sprite 1 kommt die X-Position in &AB43 und &AB44; die Y-Position in &AB45. Die Position der Sprite 2 - 7 folgen ab &AB46. Nun können Sie Ihr Sprite mit CALL &A820 ausdrucken lassen, vorausgesetzt Sie haben Spriter vorher aus den DATA-Zeilen in den Speicher übertragen. Nachdem dies geschehen ist, können Sie neue Positionen übergeben. Sie können natürlich die Positionen von mehreren Sprites verändern und dann ein CALL &A820 eingeben. Wollen Sie ein Sprite löschen, so POKEN Sie in (&AB59 + 3.Spritenr.) einen Wert, der größer als 3 ist ein und fuhren wiederum ein CALL &A820 aus. Sollte Ihnen jetzt der Kopf rauchen, dann kann man nur sagen, probieren geht über studieren. Programmhinweise: Für Besitzer von Laufwerken ist darauf zu achten, daß das eingebundene Programm mit einem GOSUB 1400 und einem GOSUB 1500 beginnt, weil sonst das Programm mit dem Laufwerk kollidiert. Bei reinem Kassettenbetrieb braucht man nur ein GOSUB 1400 eingeben.
|