![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите реализовать... [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 и показывать по таймеру уже из него.