Magic Disk 64

home to index to html: MD8912-KURSE-GRAFIKKURS_TEIL_1-4.html
MD8912-KURSE-GRAFIKKURS_TEIL_1-4.koala.png
           Teil 4 Grafikkurs            
----------------------------------------
Wie Sie  erkennen  können,  liegt  unser
Sprite (wenn es die Koordinaten 0/0 hat)
ganz genau in der linken oberen Ecke des
Bildschirms,  allerdings im unsichtbaren
Breich. Erst ab den Koordinaten X=24 und
Y=50 beginnt der sichtbare Bildschirmbe-
reich.  Da  sich  unser  Sprite in einem
Koordinatenbereich befindet der  kleiner
als  die  ersten  sichtbaren Koordinaten
ist, kann man es  natürlich  noch  nicht
sehen.  Wozu  dies  alles gut sein kann,
werden wir später noch sehen.           
Zunächst einmal wollen wir unser  Sprite
einmal auf den Bildschirm bringen. Hier-
zu müssen wir lediglich die entsprechen-
den  Bildkoordinaten in die Koordinaten-
register unseres Sprites schreiben.  Das
sind  für  Sprite 0 die Register 0 und 1
für die X- und Y-Koordinate. Positionie-
ren wir unser Sprite doch einfach einmal
in  der  Ecke links oben, diesmal jedoch
die Sichtbare :                         
POKE V+0,24 :REM X-KOORDINATE           
POKE V+1,50 :REM Y-KOORDINATE           
So. Nun müßten Sie endlich unser  Sprite
auf  dem  Bildschirm  sehen. Da steht es
nun und läßt sich  durch  nichts  beein-
drucken.  Lassen  Sie  doch  einmal  den
Bildschirm nach oben scrollen, indem Sie
mit dem Cursor in die untere linke  Ecke
fahren  und  eventuell  vorhandenen Text
"nach oben rollen"  lassen.  Sie  werden
bemerken,  daß  unser Sprite kontinuier-
lich auf seiner Stelle stehen bleibt und
sich  nicht   von   seiner   links-oben-
Position  wegbewegen  läßt. Sprites sind
somit also tatsächlich unabhängige  Gra-
fikobjekte,  mit  denen  man ganz eigene
Dinge machen kann.                      
Nun, man muß zugeben, daß ein unbewegli-
ches Sprite auf die Dauer ziemlich lang-
weilig  werden  kann.  Wie wäre es denn,
wenn wir unseren kleinen  Freund  zuerst
einmal  aus  dem  oberen  Bildschirmrand
runterlaufen ließen, und ihm dann  einen
Richtungswechsel nach rechts verpaßten ?
Nichts einfacher als das ! Hierzu müssen
wir einfach eine Schleife schreiben, die
die X-, beziehungsweise Y-Position unse-
res  Sprites  erhöht,  oder  erniedrigt.
Hier  ein  Beispiel  (wir setzen voraus,
daß alle Daten schon im Speicher stehen,
und das Sprite ordungsgemäß  eingeschal-
tet wurde) :                            
10 v=53248                              
20 POKE V+0,24     :REM SICHTBARE       
                    X-KOORDINATE.       
30 FOR I=39 TO 150 :REM VON 39 BIS 150  
                    ZÄHLEN...           
40 FOR K=0 TO 10:NEXT K                 
                   :REM VERZöGE-        
                    RUNGSSCHLEIFE, SONST
                    GEHTS ZU SCHNELL    
50 POKE V+1,I      :REM Y-POS SETZEN    
60 NEXT I                               
70 :                                    
80 FOR I=24 TO 255 :REM JETZT VON 24 BIS
                    255 ZÄHLEN...       
90 FOR K=0 TO 10:NEXT K:                
                   :REM WIEDER VERZöGE- 
                    RUNG, DAMITS FÖRS   
                    AUGE SICHTBAR WIRD. 
100 POKE V+0,I                          
110 NEXT I                              
Wenn Ihnen das hier  zu  unübersichtlich
ist,  dann starten Sie doch einfach ein-
mal das Programm  "MOVESPRITE"  auf  der
Rückseite  der  Magic Disk. Hieran sehen
Sie dann auch wozu so ein "unsichtbarer"
Bildschirmbereich nützlich ist. Man kann
nämlich ein  Sprite  kurzerhand  in  den
sichtbaren  Bereich  hineinbewegen,  daß
ist bestimmt ein besserer  Auftritt  für
unseren kleinen Freund, als wenn er ein-
fach - Zack -  auf  dem  Bildschirm  er-
scheinen würde...                       
Vielleicht  ist Ihnen in diesem Beispiel
hier ja  aufgefallen,  daß  ich  die  X-
Koordinate nur bis 255 gezählt habe, und
wenn  das  nicht  der Fall war, dann hat
Sie aber ganz sicher der Ausdruck  "Low-
Grenze"  in  der  letzten Grafik stutzig
gemacht. 255 ist ja der höchste Wert den
ein  Byte  annehmen  kann.  Für  die  X-
Koordinate  ist  dies  also der größtmö-
glichste  einsetzbare  Wert.  Wenn   Sie
jetzt   einmal  ein  Sprite  an  die  X-
Position 255  setzen,  dann  werden  Sie
sehen,  daß es noch mitten auf dem Bild-
schirm steht. Was  aber,  wenn  wir  den
Bereich ab 255 noch nutzen, unser Sprite
also  noch  ein  bisschen weiter bewegen
möchten ? Hierfür ist, wie Sie es in der
Liste der VIC-Register vielleicht  schon
gesehen  haben,  Register Nummer 16 ver-
antwortlich. Das Hauptproblem,  das  wir
nämlich  haben,  ist, daß das X-Register
eines Sprites nur  auf  8  Bit  begrenzt
ist.  In  Register 16 stellt uns der VIC
nun ein weiteres, neuntes Bit zur Verfü-
gung.  Das  Register  16  selbst  hat ja
ebenfalls 8 Bits, für jedes Sprite eins.
Für Sprite 0 ist Bit  0  zuständig,  für
Sprite 1 gibt es das Bit Nummer 1 und so
weiter...                               
Doch wozu brauchen wir die ganzen  neun-
ten  Bits ? Ganz einfach, dadurch erhöht
sich der Wertebereich des Ganzen nämlich
auf (dezimal) 512 X-Positionen  (die  0.
Position  miteingerechnet) !  Sie müssen
sich also für  die  X-Position  eine  9-
Bit-Binärzahl  vorstellen. Wollenten wir
unser Sprite beispielsweise an  Position
256   setzen,   so   wäre   die   9-Bit-
Kombination "1 0000 0000"  -  das  neute
Bit wäre also gesetzt, alle acht anderen
gelöscht.  Die  ersten  acht Bits kommen
immer in das "normale" X-Register  eines
Sprites. Das neunte nun schreiben wir in
Register  16.  Bei  Sprite 0 wäre das ja
das 0. Bit dieses Registers. Dieses  hat
den Dezimalwert 1, also schreiben wir in
V+16  den  Wert  1  und schon hätten wir
unser Sprite ein Stückchen  weiter  über
die Low-Grenze hinausgeschoben. Also :  
POKE V+0,0                              
POKE V+16,1                             
Wollten wir es jetzt  weiterbewegen,  so
müßten wir einfach wieder das X-Register
verändern,  das neute Bit in Register 16
ist ja jetzt gesetzt.  In  unserem  Bei-
spielen  vorhin, war es - wenn Sie Ihren
64er gerade frisch eingeschaltet  hatten
-  schon von Haus aus auf 0, deshalb ist
unser Sprite dann  auch  in  der  linken
Bildschirmhälfte erschienen. Wird jedoch
das  neute Bit der X-Koordinate gesetzt,
dann dient  nun  als  relativer  Anfang-
spunkt  die Bildschirmposition 256. Ach-
ten Sie also immer darauf, daß Sie  beim
Positionieren  von  Sprites  immer  eine
9-Bit-Zahl verwenden,  wobei  das  neute
Bit immer in Register 16 wandert und die
restlichen  acht  im  entsprechenden  X-
Register des Sprites landen. Setzen  wir
doch  einfach  einmal Sprite 1 an die X-
Koordinate 300. Binär  gesehen  hat  300
die folgende Kombination :              
1 0010 1100                             
Demnach müssen wir also Bit 1  im  Regi-
ster  16 setzen. Dieses hat den Dezimal-
wert 2. Die restlichen 8 Bits haben ins-
gesamt den Dezimalwert 44. Also :       
POKE V+16,2 :REM HI-BIT SPRITE 1 SETZEN 
POKE V+2,44 :REM X-POSITION SPRITE 1    
Sehen Sie Register  16  also  bitte  als
eigenständiges  Register  an.  Auch hier
müssen  8-Bit  Werte   hineingeschrieben
werden ! Wollten Sie also beispielsweise
Sprite  0,  2  und  5 in einen X-Bereich
hinter 256 setzen,  so  müßten  Sie  den
entsprechenden  Dezimalwert, nämlich 37,
ganz normal in dieses Register  hinenPO-
KEen !!!                                
Eine andere Möglichkeit  gibt  es  durch
die  logischen  Operatoren,  die  ich im
BASIC-Kurs bewußt NICHT behandelt  habe,
da  sie wirklich nur eine wichtige Rolle
in der Grafik  spielen.  Deshalb  möchte
ich dies hier noch nachholen.           
Die logischen Operatoren  kann  man  wie
die  arithmetischen Operatoren (+,-,*,/)
verwenden. BASIC stellt uns  ihrer  drei
zur  Verfügung, nämlich AND, OR und NOT.
Man kann logische  Operatoren  hervorra-
gend zur gezielten Manipulation von Bits
benutzen, ohne voher irgendwelche Binär-
zahlen  in  Dezimalzahlen  umrechnen  zu
müssen  und  umgekehrt.  Bei  AND und OR
werden ganz einfach zwei Binärzahlen und
ihre Bits  miteinander  verglichen,  und
nach einer logischen Entscheidungstabel-
le resultiert  aus  dem  Zustand  dieser
Bits  ein  bestimmtes Ergebnis. Das hört
sich vielleicht komplizierter an als  es
ist.  Beginnen  wir  doch einfach einmal
mit einem Beispiel. AND ist englisch und
heißt UND. Ich möchte  nun  einmal  ganz
einfach  mit  dem  AND-Operator verglei-
chen, und Ihnen das  Ergebnis  erklären.
Hier erst einmal das Beispiel :         
    0100 0010 (dez. 66)                 
AND 0101 0000 (dez. 80)                 
-----------------------                 
 =  0100 0000 (dez. 64)                 
Der  Computer hat hier zwei 8-Bit-Zahlen
miteinander geUNDet. Hierbei hat er  im-
mer das n-te Bit der ersten Zahl mit dem
n-ten  Bit  der  zweiten Zahl verglichen
und dann ein aus den beiden Bits  resul-
tierendes Bit ermittelt. Hierbei ging er
nach  dem  Schema vor, daß nur, wenn das
Bit der ersten Zahl UND  (AND)  das  Bit
der  zweiten  Zahl 1 oder 0 war, das re-
sultierende Bit ebenfalls gleich 1  oder
0  war.  In  allen  anderen Fällen, also
wenn das Bit der ersten  Zahl  gleich  0
und  das  Bit  der zweiten Zahl gleich 1
war (beziehungsweise umgekehrt), war das
resultierende Bit gleich 0 !            
Ebenso verhält sich das bei OR, was  auf
Deutsch ODER heißt. Hier ein Beispiel : 
    0100 0010 (dez. 66)                 
OR  0101 0000 (dez. 80)                 
-----------------------                 
 =  0001 0010 (dez. 18)                 
Sie sehen, als Ursprungszahlen habe  ich
dieselben  genommen wie eben, jedoch ist
das Ergebnis nun  ein  anderes.  Hierbei
waren  ja auch die Enscheidungskriterien
nicht dieselben. Das  resultierende  Bit
aus  den  zwei n-ten Bits einer Zahl war
nämlich nur dann 1,  wenn  das  Bit  der
ersten  Zahl ODER (OR) das Bit der zwei-
ten Zahl gesetzt war.  ODER  wenn  beide
Bits  gesetzt  waren.  Nur  wenn Beide 0
waren, war das resultierende  Bit  eben-
falls gleich 0 !                        
Valid HTML 4.0 Transitional Valid CSS!