|
Bugfixes am Forum
Subdomains aktiviert
Counterscript entfernt
|
| |
|
|
Benutzerhandbuch |
|
|
Kapitel 7
Blitz2 Objekte
·Übersicht
·Gemeinsamkeiten der Objekte
·Maximalwerte
·Benutzung eines Objekts
·Ein/Ausgabe-Objekte
·Objektstrukturen (für
Fortgeschrittene)
·Überblick über die primären Blitz2-Objekte
Screens
Windows
Gadgets & Menülisten
Paletten
Bitmaps
Shapes
Sprites
Slices
Dateien
·Zusammenfassung
Überblick über die Blitz2-Objekte
In diesem Kapitel werden die Grundzüge von Blitz2-Objekten behandelt. Objekte in Blitz2 sind Strukturen, die dazu dienen, komplexe Systemeinheiten wie Graphiken, Dateien oder Screens zu manipulieren.
Dabei sorgt Blitz2 für die gesamte Speicherverwaltung der Objekte, einschließlich der Freigabe des Speichers, wenn das Programm beendet wird.
Obwohl die meisten Objekte spezielle Befehle benötigen, wird der Programmierer nie mit einer ungewöhnlichen Syntax konfrontiert. Alle Objekte können in der von Blitz2 gewohnten modularen Weise programmiert werden.
Die folgende Liste gibt einen Überblick über die wichtigsten Objekte, die Blitz2 kennt:
Files
|
:
|
für sequentiellen und direkten Zugriff auf DOS Dateien
|
Modules
|
:
|
Musikobjekte, die kompatibel zum Soundtracker sind
|
Blitzfonts
|
:
|
8x8 Pixel große Schriften für schnelle Textausgabe mit Bitmaps
|
IntuiFonts
|
:
|
skalierbare Schriften für Window-Ausgabe
|
Shapes
|
:
|
Standard Blitz2 Graphikelemente
|
Palettes
|
:
|
Farbpaletten
|
BitMaps
|
:
|
Standard Blitz2 Display-Elemente
|
Sounds
|
:
|
digitalisierte Soundbeispiele
|
Sprites
|
:
|
Hardware-Element für den Blitzmodus
|
Screens
|
:
|
Standard Intuition-Bildschirm
|
Windows
|
:
|
Standard Intuition-Fenster
|
Gadgets
|
:
|
Standard Intuition-Gadget
|
Menus
|
:
|
Standard Intuition-Menüs
|
Gemeinsamkeiten der Objekte
Für alle Blitz2-Objekte existiert ein spezieller Satz von Befehlen, mit denen sie definiert, manipuliert und natürlich auch zerstört werden können.
Den meisten Objekten ist ein eigenes Kapitel im Referenzhandbuch gewidmet, in dem alle Befehle ausführlich erklärt sind.
Alle Blitz2-Objekte können mit dem Befehl Free zerstört werden. Wurde ein Objekt bei Beendigung des Programms nicht gelöscht, so erledigt Blitz2 das automatisch.
Der Befehl Free BitMap () gibt den für eine BitMap reservierten Speicherplatz frei. Dieser Befehl ist nützlich, wenn ein Objekt temporär benötigt wird und der Speicherplatz später im Programm noch gebraucht wird. Ansonsten kann man es Blitz2 überlassen, am Programmende aufzuräumen.
Maximalwerte
Die Anzahl der Objekte eines Typs, die vom Programm verwaltet werden können, ist begrenzt. Das Maximum läßt sich für jeden Objekt-Typ im Menü Compiler Options angeben.
Wird versucht, mehr als die maximale Anzahl eines Objekt-Typs zu erzeugen, tritt der Laufzeitfehler "Value Out Of Maximum Range" ("Maximalwert überschritten") auf.
Benutzung eines Objekts
Viele Befehle setzen voraus, das zuvor bestimmte Objekte erzeugt wurden. So muß z.B. vor der Ausführung des Befehls Blit (kopiert eine Shape auf eine Bitmap) sowohl ein Shape-Objekt als auch ein Bitmap-Objekt existieren.
Beim Aufruf des Blit-Befehls wird angegeben, welches Shape-Objekt "geblittet" werden soll und Blitz2 kopiert die Shape auf die aktuelle Bitmap.
Use BitMap 0 ; Bitmap 0 zur aktuellen Bitmap machen
Blit 3,10,10 ; kopiere Shape 3 auf die aktuelle Bitmap
Durch den Use-Befehl wird die Bitmap 0 zur aktuellen Bitmap gemacht. Auch bei anderen Objekten, wie Screens, Windows und Paletten muß zunächst der Use-Befehl angewendet werden, bevor bestimmte Operationen ausgeführt werden können.
Durch die Erzeugung eines Objektes wird dieses automatisch zum aktuellen Objekt seiner Klasse.
Das Konzept der aktuellen Objekte wird in Blitz2 durchgängig genutzt. Es hat den Vorteil, daß die Programme schneller laufen und die Modularität der Programme erhöht wird.
Ein/Ausgabe-Objekte
Objekte vom Typ BitMap, File und Window sind Mittel zur Ein- und Ausgabe. Die Befehle ObjektInput und ObjektOutput ermöglichen es, Ein- und Ausgabekanäle umzuleiten.
Das Print-Kommando schreibt immer in das aktuelle Ausgabeobjekt, die Befehle Edit und Inkey$ lesen immer vom gerade aktuellen Eingabeobjekt.
WindowOutput 2 ; Window 2 ist das aktuelle Ausgabeobjekt
Print "Hallo"
BitMapInput 1 ; Bitmap 1 wird zum aktuellen Eingabeobjekt
a$=Edit$(80)
Objekstrukturen (für Fortgeschrittene)
In Anhang 1 des Blitz2 Referenzhandbuchs befindet sich eine Beschreibung der inneren Struktur aller Objekte. Mit Hilfe des Befehls Addr, findet man die Speicherstelle an der eine Objekt-Struktur abgelegt ist.
Erfahrene Programmierer können mit Hilfe des Addr-Befehls, sowie mit den Befehlen Peek und Poke auf einzelne Elemente einer Objekstruktur zugreifen. Dies ist besonders bei bestimmten Systemobjekten, wie Screens und Windows nützlich, die Zeiger auf ihre Gegenstücke auf der Intuition-Seite enthalten.
Im folgenden Beispiel wird der Systemaufruf ScreenToFront_ dazu verwendet, die Adresse der Intuition Screen aus der Struktur des Blitz2 Screen-Objekts zu ermitteln:
ScreenToFront_ Peek.l(Addr Screen(0))
Im nächsten Beispiel wird der Systemstruktur eines Windows ein Zeiger vom Typ .Window zugewiesen. Die AmigaLibs.Res muß als residente Datei geladen sein, wenn dieses Programm ausgeführt wird.
FindScreen 0
Window 0,10,10,100,100,9,"VERGROESSERE MICH",1,2
*w.Window=Peek.l(Addr Window(0))
WindowOutput 0
Repeat
ev.l=WaitEvent
WLocate 0,0
NPrint *w\Width
NPrint *w\Height
Until ev=$200
Beachten Sie den Unterschied zwischen NewType .Window und NewType .window: .Window bezeichnet das System-Window (Intuition), während .window die Blitz2 Window-Struktur bezeichnet (s. Anhang 1 des Referenzhandbuchs).
Überblick über die primären Blitz2-Objekte
Screens
Screens können mit den Befehlen Screen und FindScreen erzeugt werden. Der Befehl Screen öffnet eine neue Screen, während FindScreen eine bereits vorhandene (meistens eine WorkBench Screen) zu einer Blitz2 Screen macht.
FreeScreen gibt eine Screen wieder frei, sollte aber erst dann aufgerufen werden, wenn alle Fenster zuvor geschlossen (also freigegeben) wurden.
Screen-Objekte erfüllen zwei Funktionen: sie bestimmen die Auflösung des Displays und der Palette und sie stellen die Fläche dar, auf der die Windows geöffnet werden. Beim Öffnen eines Windows oder bei der Benutzung von RGB- oder Paletten-Befehlen wird immer die aktuelle Screen benutzt.
Um beim Aufruf von Systemroutinen die Adresse der Systemstruktur .Screen zu ermitteln dient der Befehl Peek.l(addr Screen(n)).
Windows
Windows werden mit dem Befehl Window erzeugt. Gadgets oder Menüs werden immer zum aktuellen Window hinzugefügt. Zeichenbefehle wie WPlot, WCircle, WLine oder WBox beziehen sich ebenfalls immer auf das aktuelle Window.
Window-Objekte können Ein- und Ausgabe unter Verwendung der Befehle WindowInput und WindowOutput vornehmen, die Cursor-Position kann mit dem Befehl WLocate kontrolliert werden.
Bei der Freigabe von Windows braucht man sich nicht um die Freigabe der mit dem Window verbundenen Gadgets oder Menüs zu kümmern.
Gadget- und Menülisten
Gadgets und Menüs müssen vor ihrem Gebrauch zu Objekten zusammengefasst werden, die (na wie wohl ?) Gadgetlisten und Menülisten genannt werden. Diese Listen werden mit dem Window verbunden, wenn dieses erzeugt (geöffnet) wird. Alle Gadgets und Menüs müssen also bereits beim Programmstart in ihren Listen definiert sein.
Paletten
Paletten enthalten die RGB-Information (Rot, Grün, Blau) für alle darstellbaren Farben. Sie unterscheiden sich in folgender Weise von gewöhnlichen Blitz-Objekten:
Der Befehl UsePalette wendet die Farben, die in der angegebenen Palette definiert sind, auf die aktuelle Screen oder Slice an.
Der Befehl RGB sowie die Funktionen Red(), Green() und Blue() ändern die Farben der aktuellen Screen oder Slice, aber NICHT die der aktuellen Palette.
Es gibt keinen Befehl zur Erzeugung einer Palette. Paletten werden dadurch erzeugt, daß sie aus einer IFF-Datei geladen werden oder durch den Befehl PalRGB.
Bitmaps
Unter einer Bitmap versteht man ein Feld von Bildelementen (Pixels), aus denen sich das Display zusammensetzt.
Bitmaps können entweder mit dem Befehl BitMap erzeugt, von der Platte geladen oder von der Screen mit ScreensBitMap kopiert werden.
Bitmap-Objekte können mit FreeBitMap freigegeben werden, bis auf solche, die mit dem Befehl ScreensBitMap erzeugt wurden. Diese können nicht freigegeben werden.
Analog zu Windows, können auch Bitmaps zur Ein- und Ausgabe verwendet werden. Hierzu dienen die Befehle BitMapInput und BitMapOutput, die vorwiegend im Blitzmodus angewendet werden. Vor dem Aufruf von BitMapInput muß die Tastatur mit BlitzKeys On entsperrt werden.
Um den Cursor für die Ausgabe mit BitMapOutput zu positionieren, dient der Befehl Locate.
Shapes
Shapes sind Objekte, die Graphikelemente enthalten. Sie können entweder von der Platte geladen oder mit dem Befehl GetAShape aus einer Bitmap 'ausgeschnitten' werden.
Shapes werden mit dem allgemeinen Free Shape n Befehl freigegeben. Shapes, die in Verbindung mit Gadgets oder Menüs verwendet wurden, dürfen erst freigegeben werden, nachdem die entsprechenden Menü- und Gadgetlisten auch freigegeben wurden.
Shapes können auf vielfältige Weise manipuliert werden, sie können z.B. gedreht und skaliert werden.
Sprites
Sprites können initialisiert werden, indem sie von der Platte geladen werden oder indem ein Objekt vom Typ Shape in ein Objekt vom Typ Sprite umgewandelt wird. Die Shape kann anschließend freigegeben werden.
Der Befehl FreeSprite n gibt ein Sprite wieder frei.
Zur Zeit können Sprites lediglich im Blitzmodus verwendet werden. Im Amigamodus kann aber dennoch ein Zeiger auf ein Sprite Objekt definiert werden.
Slices
Eine Slice dient zur Konfiguration des Displays im Blitzmodus. Sie wird mit dem Befehl Slice erzeugt.
Im Gegensatz zu anderen Objekten, kann keine einzelne Slice freigegeben werden. Der Befehl FreeSlices gibt alle zu dem Zeitpunkt existierenden Slices frei.
Die Befehle Show, ShowF, ShowB und ShowSprite arbeiten alle mit der jeweils aktuellen Slice. Die Farbregister einer Slice werden von den Befehlen RGB und UsePalette beeinflußt.
Dateien
Dateien werden nicht wie andere Objekte erzeugt und freigegeben, sondern geöffnet und geschlossen.
Zum Öffnen dienen die Funktionen OpenFile(), ReadFile() und WriteFile(). Da bei Dateizugriffen Fehler auftreten können, werden hier Funktionen verwendet, sodaß erkannt werden kann, ob die Operation erfolgreich war.
Um eine Datei zu schließen, wird der Befehl CloseFile n verwendet, es gibt aber auch den Befehl FreeFile n. Es ist empfehlenswert, alle Dateien, die geöffnet wurden auch wieder 'von Hand' zu schließen und sich nicht darauf zu verlassen, daß Blitz2 dies beim Programmmende automatisch erledigt.
Natürlich ist eine Datei auch ein Ein/Ausgabe-Objekt. Die Befehle FileInput und FileOutput dienen dazu, die Ein/Ausgabe in eine Datei umzuleiten. Für die Befehle Get, Put, ReadMem und WriteMem ist dies jedoch nicht erforderlich, da sie mit einen Parameter vom Typ File# versorgt werden.
Zusammenfassung
Objekte in Blitz2 sind Datenstrukturen, die von den verschiedenen Bibliotheken verwendet werden und die eine Vielzahl von Einheiten behandeln. Blitz2 sorgt für die Speicherverwaltung der Objekte und gibt sie automatisch am Ende des Programms frei.
Viele der komplizierten Blitz2-Befehle können durch die Objekte auf einfachere Weise aufgerufen werden. Die Anzahl Parameter, die übergeben werden muß, kann durch das Konzept des 'aktuellen Objekts' minimiert werden.
Im Laufe der Zeit wird sich die Anzahl der verfügbaren Objekte in Blitz2 sicherlich noch erhöhen. Ebenso wird die Funktionalität der Objekte ständig erweitert.
|
|
|
|
|
|