forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   GIF & DrawMovie (http://forum.boolean.name/showthread.php?t=8082)

impersonalis 30.03.2009 01:50

GIF & DrawMovie
 
Вложений: 1
По просьбе трудящихся привожу вариант адекватной реализации указания из хелпа:
Цитата:

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


SBJoker 30.03.2009 10:27

Ответ: GIF & DrawMovie
 
Хочу лишь отметить что в gif файле может быть задана пауза каждому кадру своя, в этом случае блитз не сможет воспроизвести адекватную анимацию.

avel 30.03.2009 15:06

Ответ: GIF & DrawMovie
 
угу. вот у меня как раз разные паузы... прийдется видимо переконвертить во что-то...

HolyDel 30.03.2009 15:10

Ответ: GIF & DrawMovie
 
помоему самый большой минус gif-анимации - это то, что там всего 256 цветов. маловато для современных видеовставок имхо.

impersonalis 23.10.2011 03:20

Ответ: GIF & DrawMovie
 
Кстати: никто так и не сподобился написать функцию, получающую из файла количество кадров и паузу между ними?
http://www.martinreddy.net/gfx/2d-hi.html

Randomize 23.10.2011 14:38

Ответ: GIF & DrawMovie
 
Дак gif не нужен. В нём нет так нужного в последнее время альфа канала.
Для олдскульных ремейков может и прокатит, но для "новых" проектов нет.
Да и вообще сам формат гиф специфичен. Не охота время терять.
Я даже в Web страницах им пренебрегаю (порой даже напрасно)

ffinder 23.10.2011 16:02

Ответ: GIF & DrawMovie
 
под виндой нужно пользоваться .dds (быстрая загрузка, возможность сжатия и более быстрого рендеринга) и хранить кадры в текстурных атласах.

L.D.M.T. 23.10.2011 16:20

Ответ: GIF & DrawMovie
 
http://blitzbasic.com/codearcs/codearcs.php?code=2207

impersonalis 23.10.2011 17:01

Ответ: GIF & DrawMovie
 
Цитата:

Сообщение от Randomize (Сообщение 206681)
Дак gif не нужен.

Жаль что гиф из твоей аватары об этом не знает

ABTOMAT 23.10.2011 17:31

Ответ: GIF & DrawMovie
 
Цитата:

Сообщение от impersonalis (Сообщение 206707)
Жаль что гиф из твоей аватары об этом не знает

Аватар Рандома, здравствуйте! Это Аватар Автомата вас беспокоит. Да, хорошо, спасибо. Я вот почему звоню: вы наверное, не в курсе, но gif не нужен. Да, именно так. Всё, до свидания.

Phantom 23.10.2011 17:41

Ответ: GIF & DrawMovie
 
Цитата:

Кстати: никто так и не сподобился написать функцию, получающую из файла количество кадров и паузу между ними?
На PHP делал. Ради интереса даже LZW сжатие пытался реализовать, но почему-то у меня на выходе получалось что-то левое и гифка не открывалась, наверно какой-то не такой алгоритм LZW запилил или ошибка где-то была. В общем забил на это дело временно. А потом вообще забил. Я типа делал АПИ для собирания и редактирования анимаций. В принципе разбирал и собирал контейнер удачно. Просто сжатие хотел реализовать, чтобы возможно было использовать глобальную палитру вроде. Если локальная устраивает, то можно было из нескольких gif-ок собирать одну с указанием паузы между кадрами, прозрачности и флага очистки экрана.

impersonalis 23.10.2011 17:50

Ответ: GIF & DrawMovie
 
Цитата:

Сообщение от ABTOMAT (Сообщение 206710)
Аватар Рандома, здравствуйте! Это Аватар Автомата вас беспокоит. Да, хорошо, спасибо. Я вот почему звоню: вы наверное, не в курсе, но gif не нужен. Да, именно так. Всё, до свидания.

Дак что же альтернатива (вне игр)?

Randomize 23.10.2011 18:21

Ответ: GIF & DrawMovie
 
Цитата:

Сообщение от impersonalis (Сообщение 206714)
Дак что же альтернатива (вне игр)?

CSS спрайты.

Но для йоба графики типо смайлов и авиков покатит и гиф.
Скажем так: "Гиф нужен там где не серьёзно."

ffinder 23.10.2011 18:45

Ответ: GIF & DrawMovie
 
ау, посоны, мы вроде бы в разделе про Blitz3D, не?
про какие аватары вообще речь?

impersonalis 23.10.2011 19:02

Ответ: GIF & DrawMovie
 
Цитата:

Сообщение от ffinder (Сообщение 206716)
ау, посоны, мы вроде бы в разделе про Blitz3D, не?
про какие аватары вообще речь?

Это да, но в широком аспекте вопрос тоже интересует.


Часовой пояс GMT +4, время: 18:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot