Тема: GIF & DrawMovie
Показать сообщение отдельно
Старый 30.03.2009, 01:50   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
GIF & DrawMovie

По просьбе трудящихся привожу вариант адекватной реализации указания из хелпа:
For animated GIFs, the DrawMovie command simply draws the next frame of the animation each time it is called, so you need to manage your animation timing manually.
;sample gif-animation
;code: impersonalis, icq 11-999-51-51
;
;GIF: Носферату, поднимающийся по лестнице. Сцена из фильма Носферату. Вячеслав Ошурков. 1922 год. 
;(http://ru.wikipedia.org/wiki/Файл:NosferatuVCD_338_0060.gif)
;

;ставим графический режим
Graphics 800,600,32,2
;выбираем задний буфер
SetBuffer BackBuffer()

;грузим мувик
Local MOVIE=OpenMovie("Nosferatu.GIF")
;устанавливаем дефолтную межкадровую задержку в мс
Local GifPause=100;ms
;картинка для хранения текущего кадра (по размерам мувика)
Local OneFrame%=CreateImage(MovieWidth(MOVIE),MovieHeight(MOVIE))
;время последнего апдейта
Local StartTime%=MilliSecs()

;ставим точку вывода картинки в её середину
MidHandle OneFrame

;цикл отрисовки и обработки
While Not KeyHit(1)

	;numpad+ скорость растёт (задержка падает)
	;частный случай: 0 и отрицательные числа - задержки нет = тест производительности ПК
	If KeyHit(78) GifPause=GifPause-25
	;numpad- скорость падает
	If KeyHit(74) GifPause=GifPause+25

	;нужно ли поменять кадр?
	If MilliSecs()-StartTime>=GifPause
		;открываем буфер кадра
		SetBuffer ImageBuffer(OneFrame)
			;рисуем кадр через DrawMovie
			DrawMovie MOVIE
		;закрываем буфер, выбрав задний
		SetBuffer BackBuffer()
		;меняем время перелистывания кадра
		StartTime=MilliSecs()
	EndIf
	;рисуем кадр
	DrawImage OneFrame,GraphicsWidth()/2,GraphicsHeight()/2
	AppTitle GifPause+" ms."
	Flip
Wend
;убирай за собой!
CloseMovie(MOVIE)
FreeImage OneFrame
;66
End
Вложения
Тип файла: zip GifSample.zip (1.38 Мб, 682 просмотров)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Эти 7 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
ABTOMAT (30.03.2009), avel (30.03.2009), Clip (23.10.2011), h1dd3n (30.03.2009), HolyDel (30.03.2009), Nex (30.03.2009), Tadeus (30.03.2009)