простой тип для автоматической анимации анимированых картинок
мне понадобился чтобы везде не заморачиватся с кодом
в типе сделано фпс независимая реализация
потому даже со стабилизацией фпс заморачиватся не стоит
Type TAnimImage
Field AnimationSpeed# ' in milisec per frame , for example 1000/12 or 1000/25
Field Image:TImage
Field LastAnimationTime#
Field Frame#
Field StartCell%
Field CellCount%
Method Free()
Image = Null
End Method
Method Draw(x#,y#,fr% = -1)
If fr <> - 1 Then Frame = fr
DrawImage Image,x,y,Frame
If ( MilliSecs() - LastAnimationTime) => AnimationSpeed Then
Frame:+ (Float(MilliSecs() - LastAnimationTime))/AnimationSpeed
LastAnimationTime = MilliSecs()
If Frame >= CellCount Then Frame = StartCell
End If
End Method
Function CreateAnimImage:TAnimImage(Img:TImage,Speed#,StartCell%,CellCount%)
Local AnImg:TAnimImage = New TAnimImage
AnImg.AnimationSpeed = 1000.0 / Speed
AnImg.Image = Img
AnImg.LastAnimationTime = MilliSecs()
AnImg.StartCell = StartCell
AnImg.CellCount = CellCount
AnImg.Frame = StartCell
Return AnImg
End Function
End Type
примерный код как использовать (писал просто в браузере)
' 25 - ето 25 кадров в секунду
Img:TAnimImage = TAnimImage.CreateAnimImage(our_img,25,0,10)
while not keyhit(key_escape)
cls
Img.Draw(0,0)
flip
wend
Img.Free()
Img = Null
ps. я решил использовать свой метод Free для того чтобы избежать
потери памяти на кросслинках