Sprite3D - #Sprite3D.
ClipWidth- Width of the clipped sprite.
ClipHeight- Height of the clipped sprite.
FramesPerRow - The number of frames per row.
StartFrame - Start at any given frame number (from left to right).
EndFrame - Stop at any given frame number, that's greater then StartFrame.
FpsDelay - 0 equals no delay. 1 and higher adjust the fps for fast delays in your main Repeat / Until loop. This helps if your animated sprite has a lower framerate then your delay.
AnimateSprite3D() (AnimateSprite() is in post below)
Updated June 2, 2009
Code: Select all
Structure SpriteCalculations
XStart.l
YStart.l
XEnd.l
YEnd.l
Loop.l
NextFrame.l
EndStructure
Procedure AnimateSprite3D(Sprite3D, ClipWidth, ClipHeight, FramesPerRow, StartFrame, EndFrame, FpsDelay)
Static Dim Sprites.SpriteCalculations(99)
Sprites(Sprite3D)\Loop + 1
If Sprites(Sprite3D)\Loop = 1
Sprites(Sprite3D)\XStart = ((StartFrame % FramesPerRow) * ClipWidth) - ClipWidth
If XStart = 0 - ClipWidth
XStart = (ClipWidth * FramesPerRow) - ClipWidth
EndIf
Sprites(Sprite3D)\YStart = Round((StartFrame / FramesPerRow), #PB_Round_Down) * ClipHeight
Sprites(Sprite3D)\XEnd = ((EndFrame % FramesPerRow) * ClipWidth)
If XEnd = 0 - ClipWidth
XEnd = (ClipWidth * FramesPerRow) - ClipWidth
EndIf
Sprites(Sprite3D)\YEnd = Round((EndFrame / FramesPerRow), #PB_Round_Down) * ClipHeight
EndIf
ZoomSprite3D(Sprite3D, ClipWidth, ClipHeight)
ClipSprite3D(Sprite3D, Sprites(Sprite3D)\XStart, Sprites(Sprite3D)\YStart, ClipWidth, ClipHeight)
If Sprites(Sprite3D)\NextFrame = FpsDelay
If EndFrame > StartFrame
Sprites(Sprite3D)\XStart + ClipWidth
EndIf
If Sprites(Sprite3D)\XStart = ClipWidth * FramesPerRow
Sprites(Sprite3D)\XStart = 0
Sprites(Sprite3D)\YStart + ClipHeight
EndIf
If Sprites(Sprite3D)\XStart >= Sprites(Sprite3D)\XEnd And Sprites(Sprite3D)\YStart >= Sprites(Sprite3D)\YEnd
Sprites(Sprite3D)\Loop = 0
EndIf
Sprites(Sprite3D)\NextFrame = 0
Else
Sprites(Sprite3D)\NextFrame + 1
EndIf
EndProcedure