Magic Disk 64

home to index to text: MD9001-KURSE-GRAFIKKURS_TEIL_2-4.txt
MD9001-KURSE-GRAFIKKURS_TEIL_2-4.koala.png

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)

Valid HTML 4.0 Transitional Valid CSS!