Magic Disk 64

home to index to html: MD9001-KURSE-GRAFIKKURS_TEIL_2-4.html
MD9001-KURSE-GRAFIKKURS_TEIL_2-4.koala.png
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)
Valid HTML 4.0 Transitional Valid CSS!