Текущий архив: 2002.06.27;
Скачать: CL | DM;
Вниз
Помогите реализовать... Найти похожие ветки
← →
Pete © (2002-02-18 15:34) [0]Может, кто поможет. Вообщем есть анимация. Стоит пока на таймере, но если компьютер не мощный, то скорость одна, а на быстром другая. Например: на одном успевает отрисовать кадр за 10мс, а на другом за 20. А это все портит.
Вообщем как установить кол-во кадров не зависимо от производительности. Может можно использовать какие-нибудь АПИ??? Пусть хоть OpenGL, хоть DХ...
← →
DieHard © (2002-02-18 15:43) [1]Если анимация - набор картинок, то можно загрузить их все в TImageList и показывать по таймеру уже из него.
← →
Pete © (2002-02-18 16:05) [2]Именно картинка строится в буфере видеопамяти и выводится на экран. Под ДиректДро...
← →
Лёша © (2002-02-18 23:50) [3]Не понятно, что тебе нужно? "Установить кол-во кадров не зависимо от производительности" для слабых машин не возможно. Они просто могут не потянуть. Устанавливать же заведомо медленную скорость кадров тоже не целесообразно. Как я понял тебе нужен алгоритм "потери" кадров для слабых компьютеров. Скажи, если не так.
Во всяком случае, попробуй следущее:
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;
← →
Владимир Васильев (2002-02-19 09:58) [4]Во-первых,- таймер. Только не виндовый.
Под вашу задачу подойдёт DXTimer из DelphiX.
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
LagCount - показывает интервал между последовательными вызовами.
Соответственно скорость анимации изменяем пропорционально LagCount.
← →
Pete © (2002-02-19 12:38) [5]А что за DelphiX, где его взять???
← →
Pete © (2002-02-19 12:48) [6]Если у кого есть для Delphi5, то может кинете ДельфиХ на moremebeli@usp.ru... please... внешний трафик почти кончился.
← →
troits © (2002-02-19 12:58) [7]В уже упомянутой на этом форуме книге Краснова делается так: на OnIdle вешается вывод графики, а как таймер для обновления поверхностей используется GetTickCount.
← →
handra © (2002-02-20 10:51) [8]можно реализовать следующий таймер:
создать поток и передать в него адрес процедуры обновления,
в потоке вызывать эту процедуру и засыпать Sleep на определенное время, или сверять GetTickCount перед вызовом процедуры (так мы отвяжемся от времени обновления) - все это в бесконечном цикле
Страницы: 1 вся ветка
Текущий архив: 2002.06.27;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.013 c