Also wenn ich das richtig verstanden habe willst du aus einem Sprite-Strip einzelne Sprite erstellen.
Ich hab das früher immer schön mit UseBuffer gemacht, das ging ja aber leider schon seit DX9 nicht mehr und ist inzwischen (5.20) auch ganz entfernt worden.
Daher hab ich mal mit zwei Möglichkeiten die mir auf die schnelle eingefallen sind rumgespielt:
- Als Image laden und mit DrawImage auf die einzeln erstellen Sprites malen
- Als Sprite laden und mit DisplaySprite und GrabSprite auf dem Hintergrundbuffer arbeiten
Code: Alles auswählen
EnableExplicit
InitSprite()
InitKeyboard()
Define.i x
Define.i anim
Define.i i, time, text.s
Dim AnimImage(4)
Dim AnimGrab(4)
If Not OpenScreen(1920,1080,32,"Test")
End
EndIf
ClearScreen(#Black)
FlipBuffers()
ClearScreen(#Black)
FlipBuffers()
;Methode DrawImage:
CreateImage(0,200,50)
StartDrawing(ImageOutput(0))
Box(0,0,50,50,#Red)
Box(50,0,50,50,#Green)
Box(100,0,50,50,#Yellow)
Box(150,0,50,50,#Blue)
StopDrawing()
time = ElapsedMilliseconds()
For i = 0 To 500
For x = 0 To 3
AnimImage(x) = CreateSprite(#PB_Any,50,50)
StartDrawing(SpriteOutput(AnimImage(x)))
DrawImage(ImageID(0),x*-50,0)
StopDrawing()
Next
Next
text = "Image: "+Str(ElapsedMilliseconds()-time)+" ms"
FreeImage(0)
;Methode GrabSprite:
CreateSprite(0,200,50)
StartDrawing(SpriteOutput(0))
Box(0,0,50,50,#Red)
Box(50,0,50,50,#Green)
Box(100,0,50,50,#Yellow)
Box(150,0,50,50,#Blue)
StopDrawing()
time = ElapsedMilliseconds()
For i = 0 To 500
DisplaySprite(0,0,0)
For x = 0 To 3
AnimGrab(x) = GrabSprite(#PB_Any,x*50,0,50,50)
Next
Next
text = text + " | Grab: "+Str(ElapsedMilliseconds()-time)+" ms"
FreeSprite(0)
Repeat
ClearScreen(#Black)
DisplaySprite(AnimImage(Int(anim/15)),10,40)
DisplaySprite(AnimGrab(Int(anim/15)),70,40)
anim+1
If anim = 60
anim = 0
EndIf
If StartDrawing(ScreenOutput())
DrawText(10,10,text,#White,#Black)
StopDrawing()
EndIf
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Nicht wundern ich mache das ganze 500 mal um die Zeiten zu vergleichen, ich kann dir daher die Methode mit
DrawImage ans Herz legen, das ist wie ich finde sauberer und vor allem viel schneller.
Davon abgesehen kannst du (wenn ich die Hilfe richtig verstanden hab) mit der DrawImage-Methode sogar mit Multithreading beim laden arbeiten wenn dein Projekt recht groß ist^^ (wie gesagt ohne Garantie da noch nie getestet)
LG KeyKon