|
Referenzhandbuch |
|
|
Referenzhandbuch
|
Kapitel 29
|
Slices
Slices sind AmiBlitz2-Objekte, die das Herz des machtvollen Blitzmodus-Grafiksystems bilden. Durch die Benutzung von Slices sind
verblüffende und wundervolle Grafikeffekte durchführbar, Effekte, die im normalen Amigamodus nicht möglich sind. Dies
beinhaltet viele Dinge wie Dual Playfield-Displays, weiches Scrolling, Double Buffering und mehr!
Der größte Vorteil des Blitzmodus ist die flexible Kontrolle des Amiga Display. Diese Kontrolle wird durch die Anwendung
von Slices ermöglicht.
Ein Slice kann als selbständige, rechteckige Fläche eines Displays bezeichnet werden, die alle Informationen über
Displaymodus, Farbpalette, Sprites und Bitplanes beinhaltet. Daher ist es möglich, mehrere Slices gleichzeitig auf
unterschiedlichen Abschnitten des Displays mit unterschiedlicher Auflösung, verschiedenen Farben usw. darzustellen.
Bei der Anwendung von Slices müssen folgende Dinge beachtet werden:
- Slices dürfen sich in keiner Weise überlappen.
- Slices dürfen nicht horizontal, also nebeneinander, angeordnet werden.
Damit ist gemeint, daß Slices nur vertical positioniert werden dürfen, von oben nach unten und einer nach dem anderen.
- Wenn Sie einen Slicebereich festlegen, haben Sie nur über die vertikale Position, über die Breite und die Höhe
Kontrolle. Die horizontale Position wird automatisch berechnet und zwar so, daß das Slice breitenabhängig horizontal
zentriert dargestellt wird.
- Normalerweise wird zwischen Slices ein Zwischenraum von 2 horizontalen Linien gebildet, und zwar eine unter dem unteren Rand des
oberen Slice und eine über dem oberen Rand des unteren Slices. Es gibt einige Situationen, bei denen dies nicht von Vorteil ist.
Hier ein einfaches Beispiel für das Setzen eines Slices im Blitzmodus:
BLITZ ;gehe in den Blitzmodus
Slice 0,44,3 ;setze Slice 0
MouseWait
Dieses Beispiel setzt ein LowRes 8-Farben Slice - 320 Pixel breit und 200 oder 256 Pixel hoch, je nachdem ob Sie einen NTSC- oder
PAL-Amiga verwenden.
Wenn Sie das obige Beispiel eingetippt und compiliert haben, werden Sie feststellen, daß sich einige zufällige Grafiken im
Display befinden. Der Grund hierfür ist, daß Slices nur kontrollieren, wie das Display angezeigt wird, nicht aber was aktuell
angezeigt wird. Um Grafik in einem Slice zu nutzen, benötigen Sie eine Bitmap und eine Form des
Show-Befehls.
;Programmbeispiel für das Anzeigen einer Bitmap im Slice
BLITZ ;Gehe in den Blitzmodus
BitMap 0,320,DispHeight,3 ;setze eine 8 Farben Bitmap
Cls 2 ;fülle die Bitmap mit Farbe 2
Slice 0,44,3 ;setze ein Slice
Show 0 ;zeige Bitmap 0 im Slice
MouseWait
Wenn eine Bitmap so initialisiert und mit Show angezeigt wird, können nun alle verfügbaren
Grafikkommandos auf der Bitmap benutzt werden. Nachfolgend ein Beispiel, das mit dem Circlef-Befehl arbeitet:
;ein kleines Slice-Programmbeispiel
BLITZ ;Blitzmodus an
BitMap 0,320,DispHeight,3 ;setze 8-Farben-Bitmap
Slice 0,44,3 ;setze 1 Slice
Show 0 ;zeige Bitmap 0
For k=1 To 100 ;zeichne 100 Kreise
Circlef Rnd(320),Rnd(DispHeight),Rnd(10)+5,Rnd(7)+1
Next
MouseWait
Dieses Beispiel ist sehr einfacher Natur, aber es zeigt, mit wie wenig Schritten eine effektvolle Arbeit mit Slices möglich ist.
In den vorangegangenen Beispielen haben wir die Kurzform des Standard-Slice-Befehls benutzt. Diese Kurzform
erlaubt aber nur die Nutzung eines aktiven Slices auf dem Display. Möchten Sie mehrere Slices gleichzeitig auf dem Display verwenden,
muß das komplexere Slice-Kommando benutzt werden.
Hier ein kurzes Beispiel für Mehrfachslices:
;Multi Slice-Programmbeispiel
;
BLITZ ;Blitzmodus! Yeah!
BitMap 0,320,100,3 ;gib mir eine Bitplane
Cls 2 ;füll sie mit Farbe 2
BitMapOutput 0 ;und gebe darauf...
Print "Hallo - Slice-Magie!" ;unseren Text aus
Slice 0,44,160,100,$fff8,3,8,32,320,320 ;Slice 0 einrichten...
RGB 1,15,15,15 ;und 2 Farben für Slice 0 ändern
RGB 2,8,0,15
Show 0 ;zeige Bitmap 0
Slice 1,146,320,100,$fff9,3,8,32,320,320 ;2. Slice einrichten
RGB 1,15,15,0 ;2 Farben für Slice 1 ändern
RGB 2,0,8,15
Show 0 ;zeige auch Bitmap 0
MouseWait
Beachten Sie, daß der Text "Hallo - Slice-Magie!" an 2 verschiedenen Plätzen auf dem Display erscheint, obwohl er nur
einmal ausgegeben wurde! Dies liegt daran, daß wir für beide Slices dieselbe Bitmap zeigen (Show 0). Auf dieser Bitmap wurde
unser Text geschrieben.
Beachten Sie ferner, daß das obere Slice LowRes- und der untere HiRes-Auflösung besitzt.
Und schließlich beachten Sie, daß sich zwischen den beiden Slices ein vertikaler Zwischenraum von 2 Linien befindet.
Hier noch ein letzter, wichtiger Hinweis zu Slices - Slice-Objekte können nicht einzeln aus dem Speicher entfernt werden. Es ist nur
möglich, alle vorhandenen Slices zusammen aus dem Speicher zu löschen (FreeSlices-Befehl).
Befehl: Slice
Syntax Kurzform: Slice Slicenummer,Y,Flags
Syntax Standard: Slice Slicenummer,Y,Breite,Höhe,Flags,Bitplanes,Sprites,Farben,Breite1,Breite2
Der Y-Parameter gilt für beide Formen und legt die Y-Positionen fest, an der der Slice beginnt.
Ein Wert von 44 läßt das Slice oben im Bildschirm beginnen (also nicht ein Wert von
0).
Für die Kurzform gilt folgendes:
Der Flags-Parameter bestimmt die Farbtiefe des Slice. Möchten Sie einen LowRes-Slice mit Farbtiefe
2 (4 Farben) öffnen, ist Flag = 2. Normalerweise wird ein
LowRes-Slice geöffnet. Möchten Sie einen HiRes-Slice öffnen, addieren Sie 8 dazu.
Flag = 12 entspricht HiRes mit 16 Farben.
Die Breite eines Slices, das mit der Kurzform geöffnet wurde, beträgt bei LowRes 320 Pixel und bei HiRes 640 Pixel. Bei Benutzung
dieser Syntax wird die Höhe 256 Pixel (PAL) oder 200 Pixel (NTSC) betragen.
Mehr Möglichkeiten bietet Ihnen die Standardform des Befehls.
Erklärung der Parameter der Standardform:
- Y-Parameter wird wie unter Kurzform angegeben.
- Breite und Höhe erlauben die Angabe von Werten für
die Größe des Slices. Diese Parameter werden in Pixel angegeben.
- Bitplanes kennzeichnet die Farbtiefe, die das Slice haben soll.
- Sprites gibt an, wieviele Spritekanäle in diesem Slice zur Verfügung stehen sollen.
Jedes Slice kann 8 Spritekanäle nutzen. Durch Anwenden mehrerer Slices kann so die "Amiga 8 Sprite Grenze" umgangen werden. Im
obersten Slice sollten immer alle 8 Kanäle freigegeben werden.
- Farben gibt an, wieviel Farben eine Palette enthalten darf, die für das Slice genutzt
werden soll und darf 32 nicht überschreiten.
- Breite1 und Breite2 legen die Breite, in Pixel, für
alle Bitmaps fest, die in diesem Slice angezeigt werden. Wurde ein Slice als Dual-Playfield-Slice gesetzt, gibt
Breite1 die Breite der Vordergrundbitmap und Breite2 die Breite
der Hintergrundbitmap an. Wurde der Slice NICHT als Dual-Playfield-Slice gesetzt, geben Sie für
Breite1 und Breite2 dieselben Werte ein.
Diese beiden Parameter erlauben das Anzeigen übergroßer Bitmaps und ermöglichen ein weiches Hardwarescrolling durch
große Bitmaps.
Als letztes befassen wir uns mit den Flags, da dieser Abschnitt sehr komplex ist.
Flags erlaubt die Kontrolle über das Aussehen und die Effekte des Slices.
gesetzte Flags |
Effekt |
Max. BitPlanes |
$fff8 |
Standard-LoRes-Slice |
6 |
$fff9 |
Standard-HiRes-Slice |
4 |
$fffa |
LoRes, Dualplayfield |
6 |
$fffb |
HiRes, Dualplayfield |
4 |
$fffc |
HAM-Slice |
nur 6 |
Hier einige Beispiele:
WARNUNG - Das nächste Bit ist nur von Anwender zu benutzen, die nähere Kenntnisse hierzu besitzen.
Flags sind ebenfalls eine Auswahl von individuellen Bit-Flags. Diese Bit-Flags kontrollieren den Aufbau
der Slice-"Copperliste". Es folgt eine Liste der Bitnummern und deren Effekte:
Bit# |
Effekt |
15 |
Kreiert Copper MOVE BPLCON0 |
14 |
Kreiert Copper MOVE BPLCON1 |
13 |
Kreiert Copper MOVE BPLCON2 |
12 |
Kreiert Copper MOVE DIWSTRT und MOVE DIWSTOP |
10 |
Kreiert Copper MOVE DDFSTRT und MOVE DDFSTOP |
8 |
Kreiert Copper MOVE BPL1MOD |
7 |
Kreiert Copper MOVE BPL2MOD |
4 |
Kreiert 2 Linien über den Slice |
3 |
Erlaubt weiches horizontales Scrolling |
2 |
HAM-Slice |
1 |
Dualplayfield-Slice |
0 |
HiRes-Slice - Default ist LoRes |
Der Bitplanes-Parameter kann auch genutzt werden, um "nur gerade" oder
"nur ungerade" Bitplanes zuzulassen. Dies erlaubt es, im Dualplayfieldmodus verschiedene Vorder- oder Hintergrund-Bitmaps
anzuzeigen, ohne die andere zu zerstören.
Für Nur-Vordergrund-Bitplanes wird Bit 15, für Nur-Hintergrund-Bitplanes Bit 14 des
Bitplanes-Parameters gesetzt.
Beispiel:
;
; Slice mit Kreis - Programmbeispiel
;
BLITZ ;Auf Wiedersehen OS!
BitMap 0,320,200,3 ;mach eine Bitmap
Circlef 160,100,50,2 ;gib mir die Kugel
Slice 0,44,320,200,$fff8,3,8,32,320,320 ;setze einen Slice
Show 0 ;zeige die Bitmap
MouseWait
siehe auch: Use Slice, Show, FreeSlices
Befehl: Use Slice
Syntax: Use Slice Slicenummer
Modus: Amiga/Blitz
Erklärt den Slice Slicenummer als aktuell zu benutzenden Slice. Dies benötigen Befehle wie
Show, ShowF, ShowB und
BlitzModus-RGB.
Beispiel:
BLITZ ;Blitzmodus
BitMap 0,320,200,3 ;BitMap setzen
Circlef 160,100,80,2 ;und einen Kreis malen
Slice 0,44,320,100,$fff8,3,8,8,320,320 ;ein Slice
Slice 1,44,320,146,$fff8,3,8,8,320,320 ;ein anderes
Use Slice 0 ;benutzte das erste
Show 0
RGB 2,15,15,0 ;RGB/Show betrifft Slice 0
Use Slice 1 ;benutze Slice 1
Show 0
RGB 2,0,8,15 ;Rgb und Show betreffen nun dieses
MouseWait
siehe auch: Slice, FreeSlices
Befehl: FreeSlices
Syntax: FreeSlices
Modus: Amiga/Blitz
FreeSlices löscht alle benutzten Slices aus dem Speicher. Einzelne Slices können nicht gelöscht
werden.
siehe auch: Slice
Befehl: Show
Syntax: Show Bitmapnummer[,X,Y]
Modus: Amiga/Blitz
Zeigt die Bitmap Bitmapnummer im aktuell benutzten Slice auf dem Monitor an. Mit den Parametern
X und Y kann ein bestimmter Teil einer übergroßen
Bitmap angezeigt werden; ebenso kann hiermit ein Scrolleffekt erzeugt werden.
Für Dualplayfieldslices ist Show nicht geeignet, siehe hierfür ShowF und
ShowB.
Beispiel:
BLITZ ;gehe in den Blitzmodus
BitMap 0,640,200,2 ;Bitmap 0 erzeugen
Circlef 320,100,80,1 ;und auf ihr zwei Kreise zeichnen
Circlef 320,100,40,2
Slice 0,44,320,200,$fff8,2,8,4,640,640 ;Slice 0 bestimmen
For k=0 To 319 ;Schleifenstart
VWait ;auf den Anfang des Frames warten
Show 0,k,0 ;Bitmap 0 anzeigen
Next ;Schleifenende
MouseWait
siehe auch: ShowF, ShowB
Befehl: ShowF
Syntax: ShowF Bitmapnummer[,X,Y[,ShowB X]]
Modus: Amiga/Blitz
Zeigt bei Dual-Playfieldslices (muß mit den Flags des Slice-Befehls eingestellt sein) die gewählte
Bitmap als Vordergrundgrafik des aktuellen Slices.
Die X- und Y-Parameter werden benutzt, um die Bitmap an einem anderen
Punkt als der oberen, linken Ecke zu zeigen. Keine Angaben entsprechen dem Wert 0.
Der optionale Showb X-Parameter wird nur benötigt, wenn Sie im Dualplayfieldslice nur eine
Vordergrundbitmap verwenden wollen. In diesem Fall wird der X-Offset der Hintergrundgrafik im
Showb X-Parameter eingetragen.
Beispiel:
BLITZ ;Blitzmodus!
BitMap 0,640,200,2 ;Bitmap erstellen
Circlef 320,100,80,1 ;und zwei Kreise zeichnen
Circlef 320,100,40,2
Slice 0,44,320,200,$fffa,4,8,32,640,640 ;Dual-Playfield-Slice!
ShowB 0,160,0 ;Zeige Hintergrund-Bitmap
For k=0 To 319 ;Schleifenstart
VWait ;auf Vertical Blank warten
ShowF 0,k,0 ;Vordergrund-Bitmap
Next ;Schleifenende
MouseWait
Befehl: ShowB
Syntax: ShowB Bitmapnummer[,X,Y[,ShowF X]]
Modus: Amiga/Blitz
Zeigt bei Dualplayfieldslices (muß mit den Flags des Slice-Befehls eingestellt sein) die gewählte
Bitmap als Hintergrundgrafik des aktuellen Slices.
Die X- und Y-Parameter werden benutzt, um die Bitmap an einem anderen
Punkt als der oberen, linken Ecke zu zeigen. Keine Angaben entsprechen dem Wert 0.
Der optionale ShowF X-Parameter wird nur benötigt, wenn Sie im Dualplayfieldslice nur eine
Hintergrundbitmap verwenden wollen. In diesem Fall wird der X-Offset der Vordergrundgrafik im
ShowF X-Parameter eingetragen.
Beispiel:
BLITZ ;Blitzmodus
BitMap 0,640,200,2 ;Bitmap erstellen
Circlef 320,100,80,1 ;und zwei Kreise zeichnen
Circlef 320,100,40,2
Slice 0,44,320,200,$fffa,4,8,32,640,640 ;Dual-Playfield-Slice!
ShowF 0,160,0 ;Zeige Vordergrund-Bitmap
For k=0 To 319 ;Schleifenstart
VWait ;auf Vertical Blank warten
ShowB 0,k,0 ;Hintergrund-Bitmap
Next ;Schleifenende
MouseWait
Befehl: ColSplit
Syntax: ColSplit Farbregister,Rot,Grün,Blau,Y
Modus: Amiga/Blitz
Erlaubt das Aufsplittern der Farbe eines beliebigen Farbregisters relativ vom oberen Rand des aktuellen Slices.
Y legt die vertikale Position des Anfangs der Farbänderung im aktuellen Slice von oben gerechnet
fest.
Rot, Grün, Blau =
Werte von 0-15.
Beispiel:
BLITZ ;ab in den Blitzmodus!
BitMap 0,320,200,1 ;eine leere BitMap
Slice 0,44,320,200,$fff8,1,8,32,320,320 ;Slice erzeugen
Show 0 ;BitMap anzeigen
For k=0 To 15 ;Schleifenstart
ColSplit 0,k,k,k,k*17 ;setze Hintergrungregister an
;eine kluge Y-Position
Next ;Schleifenende
MouseWait
Befehl: CustomCop
Syntax: CustomCop Copin$,Y
Modus: Amiga/Blitz
CustomCop erlaubt fortgeschrittenen Programmierern das Erstellen und Benutzen eigener Copperinstruktionen ab
einer angegebenen Y-Position.
Copin$ kennzeichnet eine Zeichenkette mit entsprechenden Serien von Copperinstruktionen.
Y legt die Startposition im Display fest.
Beispiel:
BLITZ ;Blitzmodus
#BPLMOD1=$108 ;ein paar kluge Sachen
#BPLMOD2=$10A ;dto.
BitMap 0,320,400,3
For k=7 To 1 Step -1
Circlef 160,250,k*10,k ;male die SONNE!
Next
Slice 0,44,320,200,$fff8,3,8,32,320,320 ;bestimme das Slice
RGB 0,0,8,15
For k=1 To 7
RGB k,15,k*2,0
Next
ColSplit 0,0,0,8,150 ;schwere Farbenaufteilung
co$=Mki$(#BPLMOD1)+Mki$(-122)
co$+Mki$(#BPLMOD2)+Mki$(-122)
CustomCop co$,150+44 ;Custom Copper-Anweisungen
For k=0 To 199
VWait
Show 0,0,k ;und die Sonne geht auf!
Next
MouseWait
siehe auch: ColSplit
Befehl: ShowBlitz
Syntax: ShowBlitz
Modus: Blitz
Wenn Sie einen kurzen Ausflug in den Amigamodus gemacht haben, können Sie den vorher angezeigten Blitzslice unbeschädigt
weiterbenutzen.
Befehl: CopLoc
Syntax: CopLoc
Modus: Amiga/Blitz
CopLoc übergibt die Speicheradresse der Blitzmodus-Copperliste. Alle Slice-,
ColSplit- und CustomCop-Anwendungen werden in einer einzelnen Copperliste
zusammengefaßt, deren Adresse Sie mit der CopLoc-Funktion finden können.
Beispiel:
Slice 0,44,3
For k=0 To CopLen-1 Step 4
NPrint Hex$(k),":",Hex$(Peek.l(CopLoc+k))
Next
MouseWait
siehe auch: CopLen
Befehl: CopLen
Syntax: CopLen
Modus: Amiga/Blitz
CopLen übergibt die Länge der Blitzmodus-Copperliste in Bytes. Alle
Slice-, ColSplit- und CustomCop-Anwendungen werden
in einer einzelnen Copperliste zusammengefaßt, deren Länge Sie mit der CopLen-Funktion feststellen
können.
siehe auch: CopLoc
Befehl: Display
Syntax: Display On/Off
Modus: Blitz
Display ist nur im Blitzmodus verwendbar. Display Off (aus) zeigt den
aktuellen Slice als Farbblock der Farbe 0 (Leerer Slice).
|
|
|
|
|