![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Точный таймер [D7]
Света © (2013-08-05 13:48:00)Здравствуйте. Помогите решить проблему работы таймера на разных компьютерах (в программе используется компонент стандартный ТTimer). На разных компьютерах программа ведет себя по разному.
Нужен точный таймер, какие могут быть варианты?
Sha (2013-08-05 15:54:00) [1]И еще если есть возможность, то лучше всегда вычислять смещение нового положения от начального, тогда погрешность не будет накапливаться.
Sha (2013-08-05 15:03:00) [2]> Света (05.08.13 14:47) [15]
> Вы это имели ввиду?
да
брат Птибурдукова (2013-08-05 15:02:00) [3]
> на Celeron 1.7 мГц и Athlon 2.5 мГц разница где-то в два
> раза
Давай угадаю… Операционки на них стоят разные?
sniknik (2013-08-05 15:01:00) [4]> Это что за компонент?
да какая разница? все одно не поможет.
+
это не компонент.
++
в гугле забанили?
Света (2013-08-05 14:54:00) [5]>> Примени мультимедиа таймер, точность раз в 18 больше
Это что за компонент?
Света (2013-08-05 14:48:00) [6]>> ВладОшин] © (05.08.13 14:42) [14]
Timer.interval = 100
Anatoly Podgoretsky (2013-08-05 14:48:00) [7]Примени мультимедиа таймер, точность раз в 18 больше. Но по твоему коду точность не в таймере, а в клиентской обработке и отображения.
Света (2013-08-05 14:47:00) [8]newPosition := curPosition + (curTime - predTime) * delta
{delta - пикселей в промежуток времени}
Вы это имели ввиду?
Ps.А где кнопка цитироватьделась?
[ВладОшин] (2013-08-05 14:42:00) [9]>> Света (05.08.13 14:35) [12]
Timer.interval = ?
>> Sha © (05.08.13 14:32) [11]
я сейчас таким проектом занят, где приходится угадывать все :)
ибо четко не скажут все равно
Sha (2013-08-05 14:40:00) [10]правильно смотреть текущее время и вычислять новое положение
Света (2013-08-05 14:35:00) [11]А как правильно? К примеру
procedure TMainForm.TimerTimer(Sender: TObject);
begin
Shape.Left := Shape.Left + 1;
end;
и вылазит существенная погрешность
Sha (2013-08-05 14:32:00) [12]> [ВладОшин]
лекарство до обследования? )
Sha (2013-08-05 14:29:00) [13]значит, просто неправильно двигается
[ВладОшин] (2013-08-05 14:28:00) [14]1. понимаю, что одинаковый.
2. Вопрос был не в том, одинаковый ли он или нет. Вопрос был -
>> код на ontimer какой?
3.
попробуйте конструкцию
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
try
// тут ваш код
// (он может просто не успевать отработать до следующего раза на маломощном железе)
finally
Timer1.Enabled := True;
end;
end;
Света (2013-08-05 14:24:00) [15]Код в OnTimer одинаков - просто двигается фигура с лева на право.
Германн (2013-08-05 14:21:00) [16]
> Это же не дело, что на Celeron 1.7 мГц и Athlon 2.5 мГц
> разница где-то в два раза
Тут таймер не при чём. Тут порылась какая-то другая собака. (с)
[ВладОшин] (2013-08-05 14:20:00) [17]код на ontimer какой?
Света (2013-08-05 14:17:00) [18]Будет более чем достаточно!!!
Это же не дело, что на Celeron 1.7 мГц и Athlon 2.5 мГц разница где-то в два раза
[ВладОшин] (2013-08-05 14:14:00) [19]
> взять любую игру, там точная синхронизация событий по времени
в пределах "неразличимой человеком" погрешности
Света (2013-08-05 14:08:00) [20]Как же так, что не бывает? Вот взять любую игру, там точная синхронизация событий по времени. Без этого в сетевых играх между двумя игроками была бы "каша".