|
Referenzhandbuch |
|
|
Referenzhandbuch
|
Kapitel 30
|
Sprites
Sprites sind eine weitere Form von beweglichen Objekten. Wie Shapes sind auch Sprites Grafikobjekte. Im Gegensatzt zu Shapes werden
Sprites komplett von der Amigahardware verwaltet und sind unabhängig von den Bitmaps. Dies bedeutet, daß bewegte Sprites
keine Bitmapgrafikteile löschen, allerdings können Sprites dadurch auch nicht mit der Bitmapgrafik vermischt werden oder
Teile der Grafik ersetzen. Um ein einmal auf das Display angezeigtes Sprite brauchen Sie sich nicht weiter zu kümmern, es sei
denn, Sie möchten es bewegen.
Natürlich erhalten Sie diese wirkungsvollen und einfach zu handhabenden Objekte nicht ohne Nachteile. Daher ergeben sich bei der
Benutzung von Sprites einige Einschränkungen, die Sie beachten sollten:
- In dieser Version von AB2 können Sie Sprites nur im Blitzmodus verwenden.
- Sprites dürfen nur aus 3 oder 15 Farben bestehen (2 oder 4 Bitplanes)
- Jeder Blitzmodusslice kann maximal 8 Sprites darstellen. Andere Konditionen verringern die Maximalanzahl.
- Sprites werden immer im Low Resulution Modus (niedrige Auflösung, 320x 256 Pixel) dargestellt, wobei die
Auflösung des Slice, auf dem die Sprite dargestellt werden, unerheblich ist.
- Sprites können daher nur auf LowRes-Pixelpositionen gesetzt werden.
Sprites werden über 8 "Spritekanäle", numeriert von 0-7, dargestellt. Um ein Sprite darzustellen, teilen Sie dem
Spritekanal mit, welches festgelegte Bild er an einer festgelegten Position benutzen soll. Wenn Sie 3 farbige Sprites darstellen wollen,
können Sie jeden der 8 Spritekanäle (0-7) verwenden.
Bei der Darstellung von 15-Farben-Sprites dürfen nur "gerade" numerierte Kanäle benutzt werden (0,2,4,6). Der
folgende "ungerade" Kanal wird vom 15-Farben-Sprite mitgenutzt. Benutzen Sie für die Darstellung eines 15-Farben-Sprites
zum Beispiel Kanal 2, wird Kanal 3 unbenutzbar, weil das 15-Farben-Sprite 2 Kanäle benötigt.
Die Amiga Hardware begrenzt die maximale Breite eines Sprites auf 16 LoRes-Pixels. Aber keine Panik, natürlich erlaubt Ihnen
AmiBlitz2 die Darstellung von Sprites größerer Breite. Dies wird durch Aufteilung eines Shapes in Gruppen von 16 Pixel
erreicht. Ein AmiBlitz2-"Sprite" nimmt einfach mehrere, anstatt nur 1 Spritekanal.
Beispiel:
Ein 32 Pixel breites, 3-farbiges Sprite, dargestellt durch Spritekanal 4, wird konvertiert zu zwei 16 Pixel breiten Sprites, dargestellt
durch Kanal 4 und 5. Entsprechend benutzt ein 48 Pixel breites 15-Farben-Sprite, dargestellt durch Kanal 0, die Kanäle 0 bis 5.
Sprites benötigen ebenfalls einen bestimmten Bereich einer gesetzten Farbpalette für ihre Farben. Ein 15-farbiges Sprite holt
sich die RGB- Werte von den Farbregistern 17 bis 31. Ein 3-farbiges Sprite benutzt RGB-Werte, die vom zur Darstellung benutzten Kanal
abhängig sind.
Die folgende Tabelle zeigt Ihnen die Spritekanäle mit den entsprechenden Farbregistern.
Spritekanal |
Farbregister |
0, 1 |
17-19 |
2, 3 |
21-23 |
4, 5 |
25-27 |
6, 7 |
29-31 |
Befehl: GetaSprite
Syntax: GetaSprite Spritenummer,Shapenummer
Modus: Amiga/Blitz
Um ein Sprite anzeigen zu können, müssen Sie zuvor ein Spriteobjekt kreieren. Hierfür benötigen Sie Bildinformationen
für das Sprite. GetaSprite übernimmt die Grafikdaten für das Sprite
Spritenummer aus einem Shape Shapenummer. Somit stehen Ihnen alle
Manipulationsmöglichkeiten des Shapes zur Verfügung (Rotate, Scale
usw.), bevor Sie das Sprite vom Shape übernehmen. Um Speicher zu sparen, sollten Sie nach der Übernahme das Shape wieder
löschen (Free Shape), wenn Sie es nicht weiter benötigen. Dadurch belegen Sie nicht unnötig
Chipspeicher.
Beispiel:
BitMap 0,320,DispHeight,2 ;erzeuge eine Bitmap
Boxf 0,0,63,63,1 ;etwas auf ihr malen
Boxf 8,8,55,55,2
Boxf 16,16,47,47,3
GetaShape 0,0,0,64,64 ;dies in ein Shape umwandeln
GetaSprite 0,0 ;Shape->Sprite
Free Shape 0 ;das Shape brauchen wir nicht mehr
BLITZ ;Blitz!
Cls ;lösche Bitmap
Slice 0,44,2 ;kreiere Slice
Show 0 ;Bitmap 0 im Slice zeigen
For k=0 To 1 ;da das Sprite 64 Pixel breit ist,
RGB k*4+17,15,15,0 ;braucht es vier Sprite-Kanäle (64/16)
RGB k*4+18,15,8,0 ;daher müssen neue Palette-Register
RGB k*4+19,15,4,0 ;angepasst werden
Next
For k=0 To 319 ;Schleifenstart
VWait ;auf Vertical Blank warten
ShowSprite 0,k,100,0 ;Sprite anzeigen...
Next ;Schleifenende
MouseWait
siehe auch: Free Sprite, ShowSprite
Befehl: ShowSprite
Syntax: ShowSprite Spritenummer,X,Y,Spritekanal
Modus: Amiga/Blitz
ShowSprite benutzen Sie, um das Sprite über einen Spritekanal aktuell darzustellen.
X und Y kennzeichnen die Spriteposition, an der das Sprite
dargestellt wird. Diese Parameter müssen IMMER in LoRes-Pixel angegeben werden. Spritekanal ist
ein Wert zwischen 0 und 7 und legt fest, über welchen Kanal
das Sprite dargestellt wird.
siehe auch: GetaSprite
Befehl: InFront
Syntax: InFront Spritekanal
Modus: Amiga/Blitz
Wenn Sie eine Bitmapgrafik zusammen mit Sprites darstellen wollen, können Sie festlegen, welche Sprites "vor" der Grafik
und welche "hinter" der Grafik dargestellt werden sollen (einfache 3D-Effekte). Hierzu dient der
InFront-Befehl.
Spritekanal muß eine gerade Zahl zwischen 0 und 8 sein. Nach Ausführung eines
InFront-Befehls werden alle Sprites, die über Spritekanälen, die größer oder gleich
Spritekanal sind, "hinter" Bitmapgrafiken, alle anderen "vor" Bitmapgrafiken dargestellt.
Beispiel:
InFront 4 bewirkt, daß jedes Sprite, welches über Spritekanal 4, 5, 6 oder 7 dargestellt
wird, hinter der Grafik erscheint, und daß alle Sprites, die über Kanal 1, 2 und 3 dargestellt werden, vor der Grafik erscheinen.
Infront ist nur für Nichtdualplayfieldslices geeignet. Für Dualplayfieldslices benutzen Sie bitte
InFrontF und InFrontB.
Beispiel:
BitMap 0,320,DispHeight,2 ;erstelle Bitmap
Boxf 0,0,63,63,1 ;und male etwas
Boxf 8,8,55,55,2
Boxf 16,16,47,47,3
GetaShape 0,0,0,64,64 ;in ein Shape
GetaSprite 0,0 ;und dann in ein Sprite
Free Shape 0 ;das Shape brauchen wir nicht mehr...
BLITZ ;Blitz-Modus
Cls ;lösche Bitmap
Slice 0,44,2 ;erzeuge ein Slice
Show 0 ;Bitmap 0 im Slice zeigen
For k=0 To 3 ;diese Schleife setzt alle drei farbigen
RGB k*4+17,15,15,0 ;Sprites auf dieseben Farben
RGB k*4+18,15,8,0
RGB k*4+19,15,4,0
Next
Circlef 0,160,100,90,3 ;ein Kreis
Circlef 0,160,100,80,0 ;und ein Loch ... ein Donut!
InFront 4 ;Sprites 4-7 dahinter
For k=0 To 319 ;Schleifenstart
VWait ;auf Vertical-Blank warten
ShowSprite 0,k,20,0 ;vorderes Sprite zeigen
ShowSprite 0,k,120,4 ;hinteres Sprite zeigen
Next ;Schleifenende
MouseWait
siehe auch: InFrontF, InFrontB
Befehl: InFrontF
Syntax: InFrontF Spritekanal
Modus: Amiga/Blitz
InFrontF wird bei Dualplayfieldslices benutzt, um die Sprite-/Playfield-Priorität, bezogen auf das
Vordergrundplayfield, festzulegen. Durch Kombinationen von InFrontF und InFrontB
(für das Hintergrundplayfield) ist eine Darstellung von Sprites in 3 verschiedenen Tiefen, einige vor beiden Playfields, einige
zwischen den Playfields und einige hinter beiden Playfields, möglich.
Weitere Informationen erhalten Sie unter InFront.
Beispiel:
BitMap 1,320,200,2 ;erzeuge eine "Hintergrund"-Bitmap
Boxf 80,50,240,150,3 ;für das Szenario ein Viereck zeichnen
BitMap 0,320,200,2 ;erstelle "Vordergrund"-Bitmap
Boxf 0,0,63,63,1 ;einige Vierecke malen
Boxf 8,8,55,55,2
Boxf 16,16,47,47,3
GetaShape 0,0,0,64,64 ;ein Shape auswählen
GetaSprite 0,0 ;und in ein Sprite wandeln
Free Shape 0 ;Shape wieder löschen
Cls ;Bitmap löschen
Circlef 160,100,90,3 ;für den Vordergrund Szenario erstellen
Circlef 160,100,80,0
BLITZ ;BLITZ!
Slice 0,44,320,200,$fff2,4,8,32,320,320 ;ein Dualplayfield-Slice
ShowF 0 ;vordere Bitmap zeigen
ShowB 1 ;hintere Bitmap zeigen
For k=0 To 3 ;alle Spritefarben setzen
RGB k*4+17,15,15,0
RGB k*4+18,15,8,0
RGB k*4+19,15,4,0
Next
InFrontF 0 ;Vordergrund ist vor den Sprites 2-7
InFrontB 4 ;Hintergrund ist vor den Sprites 4-7
For x=0 To 319 ;Schleife für Sprite-Bewegung
VWait ;Vertical-Blank abwarten
ShowSprite 0,x,20,0 ;Sprite hinter Vordergrund, vor Hintergrund
ShowSprite 0,x,120,4 ;Sprite hinter allem zeigen
Next ;Schleifenende
MouseWait
Befehl: InFrontB
Syntax: InFrontB Spritekanal
Modus: Amiga/Blitz
InFrontB wird bei Dualplayfieldslices benutzt, um die Sprite-/Playfield-Priorität, bezogen auf das
Hintergrundplayfield, festzulegen. Durch Kombinationen von InFrontB und InFrontF
(für das Vordergrundplayfield) ist eine Darstellung von Sprites in 3 verschiedenen Tiefen, einige vor beiden Playfields, einige
zwischen den Playfields und einige hinter beiden Playfields, möglich.
Weitere Informationen erhalten Sie unter InFront.
siehe auch: InFront, InFrontF
Befehl: LoadSprites
Syntax: LoadSprites Spritenummer[,Spritenummer],Filename$
Modus: Amiga
Ermöglicht das Einladen eines Sprite-"Bereiches" von Disk als eine Serie von Spriteobjekten. Das mit
Filename$ angewählte File muß zuvor mit dem SaveSprites-Befehl
angelegt worden sein. Der erste Spritenummer-Parameter bestimmt die Nummer des ersten Spriteobjektes,
das eingeladen wird. Weitere Sprites im File werden eingeladen als Spriteobjekte mit aufsteigenden Nummern. Der zweite
Spritenummer-Parameter gibt das letzte Spriteobjekt an, bis zu welchem eingeladen werden soll. Befinden
sich zuwenig Sprites im File, um die angegebene Anzahl Sprites einzuladen, sind diese Sprites nicht nutzbar.
siehe auch: SaveSprites
Befehl: SaveSprites
Syntax: SaveSprites Spritenummer,Spritenummer,Filename$
Modus: Amiga
Speichert einen Bereich von Spriteobjekten ab. Das File kann später mit LoadSprites wieder eingeladen
werden. Der zu speichernde Spritebereich wird mit Spritenummer Spritenummer festgelegt, wobei der
erste Parameter das niedrigste Sprite angibt, das gesichert werden soll und der zweite Parameter das höchste Sprite.
siehe auch: LoadSprites
|
|
|
|
|