Referenzhandbuch |
Kapitel 31 |
Screen 0,3 ScreensBitMap 0,0 Cls Circlef 32,32,32,3 Circlef 32,32,16,2 GetaShape 0,0,0,64,64 Cls Blit 0,160,100 MouseWait
| BLTCON0-Modus | Effekt |
| CookieMode | Shapes werden gezeichnet "wie sie sind" |
| EraseMode | Auf der Zielbitmap wird eine Fläche in der Größe des Shapes gelöscht |
| InvMode | Auf der Zielbitmap wird eine Fläche in der Größe des Shapes invers gezeichnet |
| SolidMode | Das Shapeobjekt wird als einfarbiger Block gezeichnet |
Obige Modi sind alles Funktionen, die einen benutzbaren Wert wiedergeben.
Für fortgeschrittene Programmierer:
Die Bits 0 bis 7 legen Blitter MINITERM fest, die Bits 8 bis 11 legen fest, wie die Bliterkanäle benutzt werden.
Kanaleinstellung für alle Blitterroutinen in AmiBlitz2:
| Kanal | Effekt |
| A | Zeiger auf das Shape Cookie Cut |
| B | Zeiger auf Shape Data |
| C | Zeiger auf Ziel |
| D | Zeiger auf Ziel |
Beispiel:
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;benutze seine Bitmap
Cls ;lösche Bitmap
For k=7 To 1 Step -1 ;Schleifenstart
Circlef 32,32,k*4,k ;Kreise...
Next ;Schleifenende
GetaShape 0,0,0,64,64 ;Shape aufnehmen
Cls 2 ;Bitmap 2 mit Farbe 2 löschen
Circlef 160,100,120,90,6 ;einen Kreis malen
BlitMode CookieMode ;einen Blitmodus ausprobieren
Blit 0,0,0
BlitMode EraseMode ;ein anderer
Blit 0,160,0
BlitMode InvMode ;noch ein anderer...
Blit 0,0,100
BlitMode SolidMode ;und ein letzter
Blit 0,160,100
MouseWait
siehe auch: QBlitMode, BBlitMode, SBlitMode
Screen 0,1 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;benutze seine Bitmap
Cls ;lösche die Bitmap
Circlef 16,16,16,1 ;Kreis malen
GetaShape 0,0,0,32,32 ;in ein Shape wandeln
Cls ;Bildschirm wieder löschen
Queue 0,8 ;Queue initialisieren - maximal 8 Shapes
BLITZ ;Speed - im Blitz-Modus!
For y=0 To 160 ;Bitmap herunterschieben
VWait ;auf Anfang des Frames warten
UnQueue 0 ;alle vorher ge-"QBlittete" Shapes entfernen
For x=1 To 8 ;über die Bitmap bewegen
QBlit 0,0,x*32,y ;Objekt malen und es sich in Queue 0 merken
Next ;nochmal...
Next ;nochmal...
MouseWait
Screen 0,1 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;benutze seine Bitmap
Cls ;lösche Bitmap
Circlef 16,16,16,1 ;male einen Kreis
GetaShape 0,0,0,32,32 ;in ein Shape wandeln
Cls ;Bildschirm wieder löschen
For k=1 To 100
Circlef Rnd(320),Rnd(DispHeight),Rnd(50),1 ;ein paar Kreise malen
Next
CopyBitMap 0,1 ;ein Duplikat der Bitmap 0 erstellen
Queue 0,8 ;Queue erstellen - maximal 8 Einträge!
BLITZ ;Blitz-it!
For y=0 To 160 ;die Bitmap herunterfahren
VWait ;auf den Frameanfang warten
UnQueue 0,1 ;alle vorherigen Shapes löschen
For x=1 To 8 ;über die Bitmap bewegen
QBlit 0,0,x*32,y ;Objekt malen und es in Queue 0 merken
Next ;nochmal...
Next ;nochmal...
MouseWait
BitMap 0,64,64,1
Boxf 0,0,63,63,1
GetaShape 0,0,0,64,64
FindScreen 0
ScreensBitMap 0,0
Buffer 0,16384 ;16384 Bytes zum Buffern
For x=0 To 600
VWait
UnBuffer 0
BBlit 0,0,x,192
Next
MouseWait
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;benutze seine Bitmap
Cls ;Bitmap löschen
Circlef 8,8,8,7 ;Kreis malen
GetaShape 0,0,0,20,16 ;als Shape benutzen
Cls ;und Bitmap wieder löschen
For k=1 To 100 ;100 zufällige Vierecke zeichnen
Boxf Rnd(320),Rnd(200),Rnd(320),Rnd(200),Rnd(6)+1
Next
Buffer 0,16384 ;Bufferspeichergröße setzen
While Joyb(0)=0 ;Schleifenstart bis Maustastenklick
VWait ;auf Vertical Blank warten
UnBuffer 0 ;Bereiche in der Bitmap ersetzen
BBlit 0,0,SMouseX/2+80,SMouseY/2+50 ;Objekt blitten dem Puffer hinzufügen
Wend
For k=1 To 7 ;einige konzentrische Kreise zeichnen
Circle 160,115,k*10,k
Next
Stencil 0,0 ;ein Stencil aus Bitmap 0 machen
Buffer 0,16384 ;Puffer für BBlit setzen
BLITZ ;BLITZ!
For x=0 To 280 ;Shapes bewegen
VWait ;auf Vertical Blank warten
UnBuffer 0 ;BBlits erstezen
For y=50 To 150 Step 50
BBlit 0,0,x,y ;einige unserer Shapes BBlitten
Next
ShowStencil 0,0 ;Stencil
Next
MouseWait
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;benutze seine Bitmap
Boxf 0,0,31,31,3 ;eine Box auf der Bitmap zeichnen
GetaShape 0,0,0,32,32 ;als Shape 0 aufnehmen
Cls ;Bitmap löschen
Boxf 0,0,15,15,4 ;eine andere Box malen
GetaShape 1,0,0,16,16 ;und sie als Shape 1 aufnehmen
Cls ;ein anderes CLS
Stencil 0,0 ;Stencil erzeugen
For k=7 To 1 Step -1 ;ein "Bullauge" im Hintergrund malen
Circlef 160,115,k*10,k
Next
For k=1 To 50 ;50 Zufalls-Vordergrund-Kästen zeichnen
SBlit 0,1,Rnd(320-16),Rnd(200-16)
Next
Buffer 0,16384 ;initialsiere Buffer
BLITZ ;ab in den BLITZ-Mode!
For x=0 To 280 ;Schleifenstart
VWait ;auf Vertical Blank warten
UnBuffer 0 ;Pufferinhalt ersetzen
For y=50 To 150 Step 50
BBlit 0,0,x,y ;unser Shape blitten
Next
ShowStencil 0,0
Next
MouseWait
"...leider können Stencils (was immer dies auch sein soll) nicht angezeigt werden..."
Damit Sie nicht ebenso dastehen, werde ich jetzt versuchen, Ihnen das Prinzip von Stencil zu erklären.
ShowStencil wird in Verbindung mit dem BBlit-Befehl benutzt, um bei
Stencilobjekten den "Stencileffekt" zu erzeugen. Na,ja. Jetzt sind Sie sicherlich genauso schlau wie zuvor. Das englische
Handbuch gibt hier nicht viel Schützenhilfe.
Ich probiere es mal mit einem Beispiel:
Stellen Sie sich vor, Sie möchten ein Spiel im Weltall programmieren. Hierzu benötigen Sie den Weltraum, also Planeten und
Sterne. Als Grafikvordergrund wählen Sie das Fenster Ihres Raumschiffes mit vielen kleinen Details (z.B.: Radarortung in der
Mitte des Fensters). Um nun einen Stencileffekt zu erzeugen, benötigen wir die komplette (also Vorder- und Hintergrundgrafik (oder
für unser Beispiel Weltall- und Raumschiffenster-Grafik, die wir als Bitmap anzeigen. Weiterhin benötigen wir ein Stencilobjekt,
das nur die Vordergrundgrafik (Fenster mit den Details) enthält und das wir später mit dem Stencil-
oder SBlit-Befehl verwenden.
Nun blitten wir mit dem BBlit-Befehl unsere Shapes auf die Bitmap. Natürlich werden dadurch alle
Grafikteile (Vorder- UND Hintergrund) überschrieben. Aber nachdem Sie alle Shapes geBBlittet haben und nun den
ShowStencil-Befehl ausführen, wird die überschriebene Vordergrundgrafik (Ihr Fenster mit den
Details) wieder hergestellt.
Somit erscheinen Ihre Shapes zwischen der "Hintergrund-" und der "Vordergrundgrafik". 3D läßt
grüßen.
Beachten Sie: Stencilobjekte beinhalten alle wichtigen Grafikdaten, aber keine Farbinformationen.
Beispiel:
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;seine Bitmap - nun unsere!
Cls ;lösche Bitmap
Boxf 0,0,7,15,1 ;ein Shape malen
Boxf 8,6,15,11,2
GetaShape 0,0,0,16,16 ;und aufnehmen
Cls ;Bitmap wieder löschen
Boxf 80,50,240,150,3 ;irgendetwas malen
Boxf 90,60,230,140,0
Box 85,55,235,145,0
Stencil 0,0 ;aus der Bitmap ein Stencil machen
Cls ;Bitmap löschen
Circlef 160,100,90,4 ;Hintergrundgrafikem malen
Boxf 80,50,240,150,3 ;und (wieder!) Vordergrund
Boxf 90,60,230,140,4
Box 85,55,235,145,4
Buffer 0,16384 ;ein Puffer für BBlit einrichten
BLITZ ;kein Kommentar!
For x=0 To 300 ;Schleifenstart
VWait:UnBuffer 0 ;auf Frameanfang warten und Puffer ersetzen
For y=40 To 140 Step 50 ;Schleifenstart, um 3 Shapes zu zeichnen
BBlit 0,0,x,y ;ein Shape darstellen
Next
ShowStencil 0,0 ;Vordergrund ersetzen
Next
MouseWait