По просьбе трудящихся привожу вариант адекватной реализации указания из хелпа:
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