Sprite Library

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Xenon

Betreff: Sprite Library

BeitragSa, Dez 20, 2003 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

nach DCs Post hab ich mir gedacht, ich schreib mal ne Lib.

Ich denke Beispiel könnt ihr euch selbst ganz leicht schreiben Very Happy

BlitzBasic: [AUSKLAPPEN]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; Sprite²Image Lib ;
; written by Jörg (Xenon) Müller ;
; ;
; THX to Peter (DarkCorner) Schauß ;
; ;
; Using this Library is Free for ;
; everybody, but a Credits entriy ;
; is not wrong! ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Funktionen:
;
; s_InitGraphics width, height, bpp, win= Setzt Grafikmodus und initialisiert Kamera
; s_LoadImage pfad$ = Lädt ein Bild und Positioniert es an der Position 0, 0
; s_ScaleImage image, xscale#, yscale# = Skaliert das Bild in mit den übergebenen Prozentwerten
; s_ResizeImage image, xsize, ysize = Ändert die Größe des angegebenen Bildes
; s_TurnImage image, winkel = Dreht das Bild um den übergebenen Winkel unter Beachtung des aktuellen Winkels
; s_RotateImage image, winkel = Dreht das Bild in den übergebenen Winkel
; s_PositionImage image, x, y = Positioniert das Bild an den übergebenen Koordinaten
; s_MoveImage image, speed = Bewegt das Bild in der übergebenen Geschwindigkeit in die Richtung der Rotation des Bildes
; s_FreeImage image = Gibt den Speicher des Bildes frei
; s_EndGraphics camera = Beendet den Grafikmodus, erwartet den Wert den InitGraphics zurückgab
; s_GetImageHandle image = Liefert 3D-Handle des Bildes
; s_AlphaImage image, alpha# = Setzt den Alpha Wert des Bildes
; s_ColorImage image, r, g, b = Setzt die Farbe des Bildes
; s_ZOrder image = Ändert die Z-Zeichenposition des Bildes
; s_ImageParent image, parent [,global] = Setzt ein Parent eines Bildes
; s_ShowImage image = Zeigt das Bild
; s_HideImage image = Versteckt das Bild

; Aufbau des Image Speichers dieser Library:
;
; ,---------------------------------------,
; | Position | Bytes | Wert |
; |----------+-------+--------------------|
; | 0 | 4 | Handle des Sprites |
; | 4 | 4 | X Position |
; | 8 | 4 | Y Position |
; | 12 | 4 | Breite |
; | 16 | 4 | Höhe |
; | 20 | 4 | Rotation |
; `---------------------------------------`

; Grafikmodus initialisieren
Function s_InitGraphics(width, height, bpp, windowed)
; Variablen
Local camera

; Grafikmodus initialisieren
Graphics3D width, height, bpp, windowed

; Buffer setzten und Zufall festlegen
SetBuffer BackBuffer()
SeedRnd MilliSecs()

; Kamera erstellen
camera = CreateCamera()
CameraRange camera, 1, width*2
CameraClsMode camera, 0, 1
MoveEntity camera, 0, 0, -width

; Rückgabewert
Return camera
End Function

; Sprite/Bild laden
Function s_LoadImage(pfad$)
; Variablen
Local tmpimg, width, height, bank, sprite

; Speicherbank
bank = CreateBank(24)

; Bild und Sprite
tmpimg = LoadImage(pfad$)
sprite = LoadSprite(pfad$)

; Bilddaten lesen
width = ImageWidth(tmpimg)
height = ImageHeight(tmpimg)

; Daten schreiben
PokeInt bank, 0, sprite
PokeInt bank, 4, 0
PokeInt bank, 8, 0
PokeInt bank, 12, width
PokeInt bank, 16, height
PokeInt bank, 20, 0

; Bild freigeben
FreeImage tmpimg

; Sprtie bearbeiten
SpriteViewMode sprite, 2
ScaleSprite sprite, width, height
PositionEntity sprite, -GraphicsWidth()+width, GraphicsHeight()-height, 0

; Bank zurückgeben
Return bank
End Function

; Bild/Sprite scalen
Function s_ScaleImage(img, xs#, ys#)
; Variablen
Local sprite, width, height, x, y

; Spritedaten lesen
sprite = PeekInt(img, 0)
x = PeekInt(img, 4)
y = PeekInt(img, 8)
width = PeekInt(img, 12)
height = PeekInt(img, 16)

; Größe berechnen
width = width*xs#
height = height*ys#

; Sprite scalen und richtig positionieren
ScaleSprite sprite, width, height
PositionEntity sprite, x*2-GraphicsWidth()+width, -y*2+GraphicsHeight()-height, 0

; Größen speichern
PokeInt img, 12, width
PokeInt img, 16, height
End Function

; Bild/Sprite resizen
Function s_ResizeImage(img, width, height)
; Variablen
Local sprite, x, y

; Spritedaten lesen
sprite = PeekInt(img, 0)
x = PeekInt(img, 4)
y = PeekInt(img, 8)

; Sprite scalen und richtig positionieren
ScaleSprite sprite, width, height
PositionEntity sprite, x*2-GraphicsWidth()+width, -y*2+GraphicsHeight()-height, 0

; Größen speichern
PokeInt img, 12, width
PokeInt img, 16, height
End Function

; Bild/Sprite drehen
Function s_TurnImage(img, rot)
; Variablen
Local sprite, rotation

; Spritedaten lesen und Sprite Drehung berechnen
sprite = PeekInt(img, 0)
rotation = PeekInt(img, 20)
rotation = (360+rotation+rot) Mod 360

; Sprite drehen
RotateSprite sprite, rotation

; Größen speichern
PokeInt img, 20, rotation
End Function

; Bild/Sprite rotieren
Function s_RotateImage(img, rotation)
; Variablen
Local sprite

; Spritedaten lesen
sprite = PeekInt(img, 0)

; Rotation nicht größer als 360
rotation = rotation Mod 360

; Sprite rotieren
RotateSprite sprite, rotation

; Größen speichern
PokeInt img, 20, rotation
End Function

; Bild/Sprite positionieren
Function s_PositionImage(img, x, y)
; Variablen
Local sprite, width, height

; Spritedaten lesen
sprite = PeekInt(img, 0)
width = PeekInt(img, 12)
height = PeekInt(img, 16)

; Sprite positionieren
PositionEntity sprite, x*2-GraphicsWidth()+width, -y*2+GraphicsHeight()-height, 0

; Größen speichern
PokeInt img, 4, x
PokeInt img, 8, y
End Function

; Bild/Sprite bewegen
Function s_MoveImage(img, move)
; Variablen
Local sprite, x, y, width, height, rotation

; Spritedaten lesen
sprite = PeekInt(img, 0)
x = PeekInt(img, 4)
y = PeekInt(img, 8)
width = PeekInt(img, 12)
height = PeekInt(img, 16)
rotation = PeekInt(img, 20)

; Position berechnen
x = x+Cos(rotation)*move
y = y+Sin(rotation)*move

; Sprite bewegen
PositionEntity sprite, x*2-GraphicsWidth()+width, -y*2+GraphicsHeight()-height, 0

; Größen speichern
PokeInt img, 4, x
PokeInt img, 8, y
End Function

; Bild/Sprite freigeben
Function s_FreeImage(img)
; Variablen
Local sprite

; Sprite freigeben
sprite = PeekInt(img, 0)
FreeEntity sprite

; Bank freigeben
FreeBank img

; 0 zurückgeben
Return 0
End Function

; Grafikmodus zurücksetzen
Function s_EndGraphics(cam)
; Kamera freigeben
FreeEntity cam

; Buffer wechseln und Zufallssaat setzen
SetBuffer FrontBuffer()
SeedRnd 1

; Grafikmodus zurücksetzen
EndGraphics
End Function

; Entityspeicherposition zurückgeben
Function s_GetImageHandle(img)
; Wert zurückgeben
Return PeekInt(img, 0)
End Function

; Alpha Wert des Bildes setzen
Function s_AlphaImage(img, alpha#)
; Alpha Wert setzen
EntityAlpha PeekInt(img, 0), alpha#
End Function

; Farb Wert des Bildes setzen
Function s_ColorImage(img, r, g, b)
; Farbwert setzen
EntityColor PeekInt(img, 0), r, g, b
End Function

; Z Position des Bildes verändern
Function s_ZOrder(img, z)
; ZPosition setzen
EntityOrder PeekInt(img, 0), z
End Function

; ImageParent setzen
Function s_ImageParent(img, parent, glob=1)
; Parent setzen
EntityParent PeekInt(img, 0), parent, glob
End Function

; Bild anzeigen
Function s_ShowImage(img)
; Bild zeigen
ShowEntity PeekInt(img, 0)
End Function

; Bild verstecken
Function s_HideImage(img)
; ZPosition setzen
HideEntity PeekInt(img, 0)
End Function

Mfg Xenon

Clonker

BeitragMo, Dez 22, 2003 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir das jetzt angeguckt, bin aber auf ein Problem gestoßen. Ich bekomme es einfach nicht hin das Bild anzuzeigen.
Welche Funktion muß ich dafür benutzen?

Hier der Code:

BlitzBasic: [AUSKLAPPEN]

Include sprite.bb

SetBuffer BackBuffer()
s_InitGraphics(1024,768,32,1)

image = s_loadimage(\"bild.png\")

s_AlphaImage(image, 10)
s_PositionImage(image, 10, 10)
s_ShowImage(image)

Flip
WaitKey()


Was hab ich da falsch gemacht?
Die exzessive Akkumulation von Fremdwörtern suggeriert pseudointellektuelle Kompetenz.

Athlon XP 2800|Radeon 9600 Pro|512MB DDR RAM|240GB Festplatte
 

Alu-Folie

Gast

BeitragMo, Dez 22, 2003 0:14
Antworten mit Zitat
So eine Spritelibrary habe ich mir auch schon für District geschrieben.
Deine ist IMHO nicht so umfangreich aber Open Source Very Happy

Xenon

BeitragMo, Dez 22, 2003 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstens einmal is da einiges umsonst dort, das hab ich gelöscht und 2. fehlt renderworld, da es ja 3D ist!

BlitzBasic: [AUSKLAPPEN]
Include sprite.bb 
;setbuffer backbuffer() Der Backbuffer wird in s_InitGraphics gesetzt
s_InitGraphics(1024,768,32,1) ; Hier bekommst du den wert der kamera zurück, brauchst ihn aber eigentlich nicht wirklich

image = s_loadimage(\"bild.png\") ; richtig :D

s_AlphaImage(image, 0.5) ; Alpha erwartet einen wert zwischen 0 und 1, also einen float, bzw. eine prozentangabe, ich hab mal halbdurchsichtig eingestellt
s_PositionImage(image, 10, 10) ; auch richtig :D
;s_ShowImage(image) Bilder werden immer nach dem laden angezeigt. DH du brauchst showimage nur, wenn du es vorher mit hideimage versteckt hast

RenderWorld ; <- 3D, hab ich oben beschrieben

Flip ; wieder richtig :D
WaitKey()

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group