Die blauen Kästchen in der Grafik stehen
diesmal nicht für die Farbe des entsprechenden Punktes, sondern nur dafür ob er
gesetzt ist oder nicht.
Doch kommen wir nun endlich zu der Programmierung des Multicolormodes. Hierzu
brauchen wir das Register 28 des VIC. In
diesem Register steht ebenfalls jeweils
ein Bit für ein Sprite zur Verfügung.
Sie können sich also denken, wie wir den
Modus einschalten. Einfach das Bit des
entsprechenden Sprites setzen, und schon
beachtet VIC zwei Bits als farbgebende
Information.
Zur Demonstration habe ich Ihnen auch
diesmal ein Demoprogramm bereitgestellt.
Es heißt " MC-SPRITE" und ist auf der
Rückseite dieser MagicDisk zu finden.
4.) Sprites im Vorder- oder Hintergrund:
Wie Sie soeben richtig gelesen haben,
können Sprites sowohl im Hinterals
auch im Vordergrund von Grafikoder
Text auf dem Bildschirm erscheinen. Normalerweise waren sie bis jetzt ja immer
im Vordergrund. Wenn Sie schon ein wenig
mit Sprites experimentiert haben, dann
ist ihnen dies bestimmt aufgefallen. Ein
Sprite hatte stets etwaige Zeichen auf
dem Bildschirm verdeckt. Dies kann jedoch auch von Zeit zu Zeit hinderlich
sein. Angenommen, ein von Ihnen programmiertes Männchen solte auf einmal HINTER
einem Zaun laufen und nicht VOR ihm, oder das Raumschiff in Ihrem nächsten
Spiel sollte eigentlich hinter edm Planeten verschwinden und nicht vor ihm
herschwirren.
Nun, für diesen Fall stellt uns VIC
ebenfalls ein Register zur Verfügung. Es
ist das Register Nummer 27 . Jedes Bit
dieses Registers repräsentiert wiederum
ein Sprite. Setzen wir das Bit eines
Sprites in ihm, so erscheint es ab sofort HINTER einem Zeichen auf dem Bil- schirm ( bzw. einer Grafik, das kommt
dann später. . .) ; löschen wir es, so ist
es wieder im Vordergrund und verdeckt
Zeichen oder Grafik.
e) Sprite-Kollisionen:
Wie Sie sehen, kann der VIC eine ganze
Menge mit Sprites anfangen. Kommen wir
nun zur letzten Möglichkeit, mit der er
die komfortable Spriteprogrammierung
unterstützt, der Sprite-Kollision. VIC
steuert nämlich nicht nur seine acht
" Schäfchen" über den Bildschirm, sondern
er wacht auch über sie, wie ein Schäfer.
Und er merkt sofort, wenn sie sich gegenseitig anrempeln, oder etwa gegen
eine Mauer laufen.
Doch reden wir Klartext. VIC gibt uns
durch Register 30 und 31 die Möglichkeit, zu Öberwachen, ob, und wann ein
Sprite entweder mit einem anderen Sprite
kollidiert ( sprich: mit ihm zusammenge- troffen ist), oder an einem Zeichen des
" Hintergrundes" angeeckt ist. Seit dem
letzten Kapitel wissen wir ja, daß der
Begriff " Hintergrund" für ein Sprite ja
nur relativ ist. Es spielt keine Rolle, ob es nun im Hinteroder Vordergrund
steht, es werden die Berührungen mit
entsprechenden Grafikobjektem immer registriert. Dabei gibt Register 30 die
Sprite-Sprite- Kollision an, und Register
31 die Sprite-Hintergrund- Kollision.
Tritt einer der beiden Fälle ein, so
setzt VIC das Bit des betroffenen Sprites in einem der beiden Register. Bei
der Sprite-Sprite- Kollision, sogar immer
mindestens zwei, da ja immer das eine
Sprite mit dem anderen, und das andere
Sprite mit dem einen kollidiert. Würden
also beispielsweise Sprite 0 und Sprite
3 sich irgendwo bei ihrer Reise auf dem
Bildschirm begegnen, so würde VIC in
Register 30 die Bits 0 und 3 setzen, da
diese beiden Sprites ja auch an der Kollision, oder sagen wir an dem " Unfall"
beteiligt sind. Diese Funktion kann
übrigens sehr hilfreich bei der Programmierung von Spielen sein, wenn beispielsweise ein gegnerisches Raumschiff
von dem Laser des Eigenen ( alle Objekte
sind natürlich als Sprites dargestellt) getroffen wurde. So kann man schnell
feststellen, welche Sprites miteinander
kollidierten und eine Entscheidung treffen, ob das Raumschiff nun sprchwörtlich
explodieren soll, oder ob es doch eine
andere Kollision war, bei der ein anderes Ereignis eintritt.
Eines müssen wir jedoch hierbei immer
beachten. VIC löscht die Register die
eine Kollision anzeigen nicht wieder von
alleine. Diese Aufgabe bleibt uns überlassen. Demnach sollte man nach dem
obligatorischen Einlesen eines Kollisionsregisters mit:
A=PEEK(V+30) und/oder B=PEEK(V+31)
es wieder löschen, in dem man in diese
Register wieder den Wert 0 hineinPOKEd, so daß alle Bits wieder gelöscht sind, und neue Kollisionen vernünftig festgestellt werden können. Jedoch sollten Sie
vorher sichergehen, daß Sie die beiden
Sprites ( oder Sprite und Hintergrund) wieder auseinander gebracht haben, denn
solange sie noch in Kontakt miteinanander stehen, setzt VIC die Kollisionsregister immer wieder neu. Deshalb könnte
er mehrmals einund dieselbe Kollision
anzeigen! Auch hierzu ein Beispielprogramm auf der Rückseite dieser MD. Es
heißt " SPR-KOLLISION" .
So, nun sind wir mit der Spriteprogrammierung durch. Ich habe Ihnen jetzt alles über Sprites erzählt, was es da zu
erzählen gibt. Nächsten Monat wollen wir
uns dann endlich um die geheimnisvolle
Grafikprogrammierung kümmern. Bis dahin
viel Spaß beim " spriten" .
( ub)