Startseite
Amiforce 2.1     Amiforce-News Amiforce-News Amiforce-Forum Amiforce-Forum Amiforce-Chat/IRC-Chat Amiforce-Chat/IRC-Chat Gästebuch Gästebuch Kontakt mit dem Webmaster aufnehmen Kontakt mit dem Webmaster aufnehmen

Amiblitz3
Amiblitz2(alt)
Storm Wizard
Abakus-Design
Helpguide
Toolsguide
Tipps&Tricks
Gamesfun
Links
Download
Musik

Bugfixes am Forum
Subdomains aktiviert
Counterscript entfernt
  Navigation:   Index /  Amiblitz /  Amiblitz Lesematerial /  Ab2 Referenzhandbuch (index) /  Ab2 Referenzhandbuch (Kapitel 30) / 

Referenzhandbuch



Referenzhandbuch

Kapitel 30


Kapitel 29 Inhaltsverzeichnis Kapitel 31

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

  • GetaSprite
  • ShowSprite
  • InFront
  • InFrontF
  • InFrontB
  • LoadSprites
  • SaveSprites



  • Index

    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



    Index

    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



    Index

    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



    Index

    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
    




    Index

    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



    Index

    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



    Index

    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






    Impressum
    Copyright © 2001-2007 by Cj-Stroker. Alle Rechte vorbehalten (Legal Info)
    AMIGA und zugehörige Logos sind eingetragene Warenzeichen von Amiga, Inc.