Показать сообщение отдельно
Старый 13.09.2013, 18:00
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 2  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Потому что Elastic Racetrack
любое выполнение кода тоже время
1. выполнить код 200 раз с интервалом 10 ms не то же самое что подождать 2000 ms, в любом случае будет тратиться время на повторный запуск таймера - это и будет погрешность.
2. цикл кадра в виртуальной машине тоже не постоянный http://www.craftymind.com/2008/04/18...sh-9-and-avm2/ он состоит из последовательных этапов (выполнение кода, апдейт таймеров, вход в кадр, рендеринг, выход из кадра, включение сборки мусора если нужно, обработка лоадеров и тд и тп), поэтому момент повторного запуска таймера зависит не от константного времени работы, а от удачного попадания в этап апдейта таймеров и времени работы предыдущих этапов (на разных машинах время будет разное). этот цикл запускается не раз в 1ms а раз в 1 кадр. тоесть если у тебя будет 60 fps то время обработки повторного таймера будет меняться +/- 16 ms.
3. Выполнение цикла кадра AVM можно приостановить извне (попытаться закрыть окно, свернуть вкладку/окно, вызвать контекстное меню и тд) если приостановить выполнение то соответсвенно у тебя так же сдвинется отсечка таймера
Поэтому не нужно завязываться на правильность работы таймера, лучше слушать событие входа в кадр и определять поведение основываясь на времени с момента запуска AVM getTimer()