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)