|
Bugfixes am Forum
Subdomains aktiviert
Counterscript entfernt
|
| |
|
|
Referenzhandbuch |
|
|
Referenzhandbuch
|
Kapitel 24
|
Shapes
Shapes, auch Bobs genannt, sind Grafikobjekte. Sie sind vielfältig einsetzbar. Zum Beispiel können Sie als Grundlage für
Grafikgadgets oder Menüs benutzt werden. In Spielen finden wir sie meist als bewegliche und/oder animierte Grafikobjekte. Für
das "Zeichnen" (oder auch die Übergabe) eines Shapes auf eine Bitmap wird der Amiga-Blitterchip verwendet. Der Vorgang
ist daher sehr schnell und wird meist als "blitten" eines Shapes bezeichnet. Um eine flimmerfreie Animationroutine schreiben
zu können, ist eine größtmögliche Blitgeschwindigkeit gefordert. Manchmal ist es sogar notwendig, die
Blitgeschwindigkeit und die Animationsfolge gegenseitig anzupassen. Hierfür müssen Sie wissen, daß der Blitvorgang mit
der Größe und der Farbtiefe des Blits an Dauer zunimmt. Das Blitten eines großen Shapes dauert länger als das
Blitten eines kleinen Shapes. Das Blitten eines Shapes mit der Farbtiefe 2 (4 Farben) dauert doppelt so lange wie das Blitten eines
gleichgroßen Shapes mit einer Bitplane (2 Farben). Bei Farbtiefe 3 dauert der Vorgang dreimal so lange usw.. Es ist also schon von
der Hardware her nicht möglich, eine flimmerfreie Animation mit 50 Riesenshapes der Farbtiefe 6 zu programmieren. Ebenfalls bestimmt
die Art des Blittens die Dauer des Blitvorganges. AmiBlitz2 stellt Ihnen mit Blit den einfachsten und
schnellsten Befehl für das Blitten zur Verfügung. Hierbei ist aber ein schnelles und einfaches Löschen des Shapes nicht
möglich. Hierfür steht Ihnen der Befehl QBlit zur Verfügung. Dieser benötigt etwas mehr
Speicher und ist ein wenig langsamer, ermöglicht aber saubere Animationen. Muss auch die Hintergrundgrafik erneuert werden,
können Sie BBlit verwenden. Beachten Sie aber: BBlit ist ein machtvoller
und effektiver Befehl, benötigt aber auch sehr viel Speicher und ist entsprechend langsamer. Sie werden beim Programmieren von
Shapeanimationen immer Kompromisse eingehen müssen. Verkleinern der Shapes oder verringern der Farbanzahl oder beides, bis Sie den
gewünschten Animationsfluß erreichen. Da aber auch das Double Buffering möglich ist, können Sie ein Maximum
erreichen, das für fast alle Fälle ausreicht. Die Entscheidung, welchen Kompromiß Sie wählen, müssen Sie
allerdings als guter Programmierer selber treffen.
Befehl: LoadShape
Syntax: LoadShape Shapenummer,Filename$[,Palettennummer]
Modus: Amiga
Lädt ein IFF-ILBM-File als Shapeobjekt in den Speicher. Shapenummer bestimmt das Shapeobjekt.
Filename$ ist der Pfad und der Name Ihres Bildes, das Sie laden möchten.
Palettennummer ist optional. Wenn sie mit angegeben wird, werden die Farben des Shapes in das
Palettenobjekt Palettennummer mit eingeladen.
Beispiel:
Screen 0,3 ;öffne einen Intuition-Screen
ScreensBitMap 0,0 ;und übernehme seine Bitmap
LoadShape 0,"MyShape.iff",0 ;ein Shape von Diskette laden
Use Palette 0 ;und seine Palette benutzen
Blit 0,0,0 ;und auf das Shape auf den Bildschirm blitten
MouseWait
siehe auch: LoadShapes, SaveShape, SaveShapes
Befehl: SaveShape
Syntax: SaveShape Shapenummer,Filename$[,Palettennummer]
Modus: Amiga
Speichert ein Shape als IFF-ILBM-File auf Datenträgern ab. Möchten Sie die Farbinformationen mitabspeichern, geben Sie den
Palettenummer-Parameter mit an.
siehe auch: LoadShape, LoadShapes
Befehl: LoadShapes
Syntax: LoadShapes Shapenummer[,ShapenummerEnde],Filename$
Modus: Amiga
LoadShapes lädt eine Serie von Shapeobjekten auf einmal in den Speicher. Die Serie muß zuvor mit
SaveShapes erstellt worden sein. Shapenummer gibt die Objektnummer
für das erste Shape an. Die weiteren Shapes werden aufsteigend hinzugefügt. ShapenummerEnde
bestimmt, wieviele Shapes der Serie geladen werden sollen. Filename$ gibt Pfad und Name des Files,
das geladen werden soll, an.
siehe auch: SaveShapes, LoadShape, SaveShape
Befehl: SaveShapes
Syntax: SaveShapes ShapenummerAnfang,ShapenummerEnde,Filename$
Modus: Amiga
Erstellt ein File mit einer Serie von Shapeobjekten. Die im Speicher befindlichen Shapes werden von
ShapenummerAnfang bis ShapenummerEnde abgespeichert.
Filename$ gibt Pfad und Name des Files an. Das File kann mit
LoadShapes später wieder geladen werden.
Hinweis:
Die zu verwendenden Shapes müssen zuvor einzeln mit LoadShape geladen werden. Wenn diese dann mit
SaveShapes gespeichert worden sind, ist ein einzelnes Laden der Shapes nicht mehr notwendig.
Vorteil: Nur ein Filezugriff notwendig.
siehe auch: LoadShapes, LoadShape, SaveShape
Befehl: GetaShape
Syntax: GetaShape Shapenummer,X,Y,Breite,Höhe
Modus: Amiga/Blitz
Schneidet einen rechteckigen Teil einer Bitmap aus und übergibt diesen als Shapeobjekt Shapenummer.
X und Y (X- und Y-Koordinaten für die linke, obere Ecke),
Länge und Höhe (beides in Pixel) geben den Bereich an, der
ausgeschnitten werden soll.
Beispiel:
Screen 0,3 ;ein Inution-Screen
ScreensBitMap 0,0 ;Bitmap nehmen
Cls ;Bitmap löschen
Boxf 10,10,29,29,2 ;etwas für ein Shape malen
Box 12,12,27,27,3
Circlef 20,20,5,4
GetaShape 0,10,10,20,20 ;Shape 0 aus Bitmap nehmen
Cls ;und Bitmap wieder löschen
For k=1 To 100 ;Start der Schleife
Blit 0,Rnd(160)+80,Rnd(100)+50 ;Shape 0 an zufällige Position blitten
Next ;Schleifenende
MouseWait
Befehl: CopyShape
Syntax: CopyShape ShapenummerQuelle,ShapenummerZiel
Modus: Amiga/Blitz
CopyShape kopiert das Shapeobjekt ShapenummerQuelle in das Shapeobjekt
ShapenummerZiel. CopyShape wird oft benutzt, wenn ein Shapeobjekt auch in
manipulierter Form (z.B: mit XFlip) vorliegen soll.
Befehl: AutoCookie
Syntax: AutoCookie On/Off
Modus: Amiga/Blitz
Schaltet das Cookieflag an oder aus. Voreingestellt ist On. Bei einer Blittingroutine (z.B.
Blit) wird ein sogenanntes Cookiecut benötigt. Immer, wenn ein Shapeobjekt erstellt wird (z.B. mit
LoadShape), wird automatisch ein Cookiecut erzeugt. Das Cookiecut verbraucht einen Teil des zur Verfügung
stehenden Chipspeicherbereichs. Sollten Sie die Shapes nicht zum Blitten nutzen wollen (z.B. als Gadget), können Sie das automatische
Anfertigen eines Cookiecuts mit AutoCookie Off ausschalten.
siehe auch: MakeCookie
Befehl: MakeCookie
Syntax: MakeCookie Shapenummer
Modus: Amiga/Blitz
Erstellt nachträglich ein "Cookiecut" für das mit Shapenummer festgelegte Shape,
wenn dies vorher ohne Cookiecut geladen wurde.
siehe auch: AutoCookie
Funktion: ShapeWidth
Syntax: ShapeWidth(Shapenummer)
Modus: Amiga/Blitz
Diese Funktion übergibt die Länge eines Shapeobjektes in Pixel.
siehe auch: ShapeHeight
Funktion: ShapeHeight
Syntax: ShapeHeight(Shapenummer)
Modus: Amiga/Blitz
Diese Funktion übergibt die Höhe eines Shapeobjektes in Pixel.
siehe auch: ShapeWidth
Befehl: Handle
Syntax: Handle Shapenummer,X,Y
Modus: Amiga/Blitz
Beim Blitten wird normalerweise die linke, obere Ecke des Shapes an die von Ihnen angegebenen Koordinaten gesetzt. Mit
Handle können Sie statt der linken, oberen Ecke eine andere Stelle des Shapes anwählen.
Der festgelegte Punkt wird auch "HOTSPOT" genannt.
siehe auch: MidHandle
Befehl: MidHandle
Syntax: MidHandle Shapenummer
Modus: Amiga/Blitz
Die Mitte des Shapeobjektes Shapenummer wird zum Hotspot erklärt.
Weitere Informationen unter Handle.
siehe auch: Handle
Befehl: XFlip
Syntax: XFlip Shapenummer
Modus: Amiga/Blitz
XFlip ist einer der mächtigen Befehle von BB2 zur Shapemanipulation.
XFlip spiegelt (oder klappt) das Shapeobjekt Shapenummer horizontal.
Beispiel:
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;seine Bitmap
Cls ;löschen
Circlef 32,32,32,3 ;malen
Boxf 32,0,63,63,2 ;ein Shape
GetaShape 0,0,0,64,64 ;aus der Bitmap aufnehmen
Cls ;Bitmap wieder löschen
CopyShape 0,1 ;das Shape kopieren
XFlip 1 ;XFlip die Kopie!
Blit 0,0,0 ;Original zeigen
Blit 1,0,100 ;geklappte Kopie zeigen
MouseWait
siehe auch: YFlip
Befehl: YFlip
Syntax: YFlip Shapenummer
Modus: Amiga/Blitz
YFlip spiegelt (oder klappt) das Shapeobjekt Shapenummer vertikal.
Beispiel:
Screen 0,3 ;ein Intuition-Bildschirm
ScreensBitMap 0,0 ;seine Bitmap
Cls ;löschen
Circlef 32,32,32,3 ;malen
Boxf 32,0,63,63,2 ;ein Shape
GetaShape 0,0,0,64,64 ;aus der Bitmap aufnehmen
Cls ;Bitmap wieder löschen
CopyShape 0,1 ;das Shape kopieren
YFlip 1 ;YFlip die Kopie!
Blit 0,0,0 ;Original zeigen
Blit 1,0,100 ;geklappte Kopie zeigen
MouseWait
siehe auch: XFlip
Befehl: Scale
Syntax: Scale Shapenummer,X-Veränderung,Y-Veränderung[,Palette]
Modus: Amiga/Blitz
Scale ermöglicht das Vergrößern oder Verkleinern des Shapes Shapenummer.
Die Parameter X- und Y-Veränderung legen den Wert der
Veränderung fest.
Ist der Wert größer 1, wird das Shape vergrößert, ist der Wert kleiner
1, wird das Shape verkleinert. Ein Wert von 1 hat keine Wirkung.
Wird nur ein Parameter angegeben, erfolgt eine Änderung nur über eine Achse.
Wird der Palette-Parameter angegeben, rechnet Blitz2 mit der "brightest Pixel"-Routine. Dies
heißt: Bei der Verkleinerung gehen keine Details verloren.
Beispiel:
Screen 0,3 ;ein Intuition-Screen
ScreensBitMap 0,0 ;Bitmap des Screens
Cls ;Bitmap löschen
For k=7 To 1 Step -1 ;eine Schleife, um eine Art
Circlef 32,32,k*4,k ;Shape zu erzeugen
Next
GetaShape 0,0,0,64,64 ;Shape aufnehmen
For k=1 To 6 ;Schleifenstart
CopyShape 0,k ;Shape kopieren
Scale k,k/4,k/4 ;Größe verändern
Next ;Schleifenende
Cls
For k=1 To 6 ;Schleifenstart
Blit k,k*32,0 ;gerade erzeugte Shapes anzeigen
Next ;Schleifenende
MouseWait
Befehl: Rotate
Syntax: Rotate Shapenummer,Drehveränderung
Modus: Amiga/Blitz
Rotate erlaubt es, das Shape Shapenummer im Uhrzeigersinn zu drehen.
Der Parameter Drehveränderung sollte zwischen 0 und
1 liegen.
Ein Wert von 0.25 dreht das Shapeobjekt um 90 Grad, 0.5 um 180 Grad.
Beispiel:
Screen 0,1 ;ein Intuition-Screen
ScreensBitMap 0,0 ;seine Bitmap übernehmen
BitMapOutput 0 ;und für "Print"-Befehle nutzen
Queue 0,1 ;Queue für QBlit erzeugen
Cls ;Bitmap löschen
Boxf 0,0,15,63,1 ;ein Rechteck zeichnen
GetaShape 0,0,0,16,64 ;und es als Shape aufnehmen
Cls ;Bitmap löschen
For k=1 To 64 ;Schleifenstart
CopyShape 0,k ;das Original-Shape 64mal kopieren
Rotate k,k/64 ;jede Kopie etwas weiter als die vorherige drehen
MidHandle k ;und sie um die Mittelachse drehen
Print "." ;dem Anwender mitteilen, daß wir noch arbeiten
Next ;Ende der Copy-Schleife
Cls ;Bitmap löschen
While Joyb(0)=0 ;während der Joystickknopf nicht gedrückt ist ...
For k=1 To 64 ;alle Shapes anzeigen
VWait ;auf den Anfang des Frames warten
UnQueue 0 ;Queue löschen
QBlit 0,k,160,100 ;und nächstes Shape malen
Next
Wend
|
|
|
|
|
|