Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите реализовать... [D5, Win95/98]


Pete ©   (2002-02-18 15:34:00) 

Может, кто поможет. Вообщем есть анимация. Стоит пока на таймере, но если компьютер не мощный, то скорость одна, а на быстром другая. Например: на одном успевает отрисовать кадр за 10мс, а на другом за 20. А это все портит.
Вообщем как установить кол-во кадров не зависимо от производительности. Может можно использовать какие-нибудь АПИ??? Пусть хоть OpenGL, хоть DХ...


handra   (2002-02-20 10:51:00) [1]

можно реализовать следующий таймер:

создать поток и передать в него адрес процедуры обновления,
в потоке вызывать эту процедуру и засыпать Sleep на определенное время, или сверять GetTickCount перед вызовом процедуры (так мы отвяжемся от времени обновления) - все это в бесконечном цикле


troits   (2002-02-19 12:58:00) [2]

В уже упомянутой на этом форуме книге Краснова делается так: на OnIdle вешается вывод графики, а как таймер для обновления поверхностей используется GetTickCount.


Pete   (2002-02-19 12:48:00) [3]

Если у кого есть для Delphi5, то может кинете ДельфиХ на moremebeli@usp.ru... please... внешний трафик почти кончился.


Pete   (2002-02-19 12:38:00) [4]

А что за DelphiX, где его взять???


Владимир Васильев   (2002-02-19 09:58:00) [5]

Во-первых,- таймер. Только не виндовый.
Под вашу задачу подойдёт DXTimer из DelphiX.

procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);

LagCount - показывает интервал между последовательными вызовами.
Соответственно скорость анимации изменяем пропорционально LagCount.


Лёша   (2002-02-18 23:50:00) [6]

Не понятно, что тебе нужно? "Установить кол-во кадров не зависимо от производительности" для слабых машин не возможно. Они просто могут не потянуть. Устанавливать же заведомо медленную скорость кадров тоже не целесообразно. Как я понял тебе нужен алгоритм "потери" кадров для слабых компьютеров. Скажи, если не так.
Во всяком случае, попробуй следущее:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

засекаем время
выключаем таймер ( Timer1.Enabled:= 1=2)
рисуем, воспроизводим кадр
смотрим, сколько прошло времени
если быстро Timer1.Interval:= Timer1.Interval - 10;
иначе Timer1.Interval:= Timer1.Interval + 10;
включаем таймер ( Timer1.Enabled:= 1=1)
end;


Pete   (2002-02-18 16:05:00) [7]

Именно картинка строится в буфере видеопамяти и выводится на экран. Под ДиректДро...


DieHard   (2002-02-18 15:43:00) [8]

Если анимация - набор картинок, то можно загрузить их все в TImageList и показывать по таймеру уже из него.


Наверх

Титульная страница Поиск, карта сайта Написать письмо