Die blauen Kästchen in der Grafik stehen
diesmal nicht für die Farbe des entspre-
chenden Punktes, sondern nur dafür ob er
gesetzt ist oder nicht.
Doch kommen wir nun endlich zu der Pro-
grammierung 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 Hinter- als
auch im Vordergrund von Grafik- oder
Text auf dem Bildschirm erscheinen. Nor-
malerweise 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 je-
doch auch von Zeit zu Zeit hinderlich
sein. Angenommen, ein von Ihnen program-
miertes 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 Pla-
neten 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 so-
fort 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 ge-
genseitig anrempeln, oder etwa gegen
eine Mauer laufen.
Doch reden wir Klartext. VIC gibt uns
durch Register 30 und 31 die Möglich-
keit, 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 Hinter- oder Vordergrund
steht, es werden die Berührungen mit
entsprechenden Grafikobjektem immer re-
gistriert. 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 Spri-
tes 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 Kol-
lision, oder sagen wir an dem "Unfall"
beteiligt sind. Diese Funktion kann
übrigens sehr hilfreich bei der Program-
mierung von Spielen sein, wenn bei-
spielsweise 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 tref-
fen, ob das Raumschiff nun sprchwörtlich
explodieren soll, oder ob es doch eine
andere Kollision war, bei der ein ande-
res 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 über-
lassen. Demnach sollte man nach dem
obligatorischen Einlesen eines Kolli-
sionsregisters 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 festge-
stellt 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 miteinanan-
der stehen, setzt VIC die Kollisionsre-
gister immer wieder neu. Deshalb könnte
er mehrmals ein- und dieselbe Kollision
anzeigen! Auch hierzu ein Beispielpro-
gramm auf der Rückseite dieser MD. Es
heißt "SPR-KOLLISION".
So, nun sind wir mit der Spriteprogram-
mierung durch. Ich habe Ihnen jetzt al-
les ü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)