Тема: TAnimImage
Показать сообщение отдельно
Старый 18.06.2007, 23:01   #1
jimon
 
Сообщений: n/a
TAnimImage

простой тип для автоматической анимации анимированых картинок
мне понадобился чтобы везде не заморачиватся с кодом

в типе сделано фпс независимая реализация
потому даже со стабилизацией фпс заморачиватся не стоит

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 для того чтобы избежать
потери памяти на кросслинках
 
Ответить с цитированием