PDA

Просмотр полной версии : Вопрос наверное к профи. (timer)


sourcer21
01.08.2007, 02:00
Вот простенький скрипт который создает интервал в 10мс... но как видите что интервал то больше то меньше. Есть варианты как сделать более точныйинтервал? Нужна максимальная точность :(


var prevTime : Number = 0;
var timer = new Timer(10); // ms
timer.addEventListener("timer", timeHandler);
timer.start();

function getTime ()
{
var d = new Date();
return d.getTime();
};

function timeHandler (event:TimerEvent)
{
var cur : Number = getTime();
var dif : Number = cur - prevTime;
trace(" current = "+cur+" prev = "+prevTime+" dif = "+dif);
prevTime = cur;
};

Usnul
01.08.2007, 02:13
есть, пользоваться getTimer() и ставить как можно меньше мусора в команду проверки. интервал никогда не был точен и никогда не будет, в хелпе все расписано, как он работает и почему имеено так а не иначе.

sourcer21
01.08.2007, 02:20
Я порнимаю что он небыл точен, но кстати я невидел в хелпе ичто то немогу найти поповоду того почему он так работет а не как то подругому. Не поможешь найти это место в хелпе где написано? Ну хорошо а если мне нужны точные интервалы то что же тогда делать, неужели нет решения никакого? Просто это как бы простой пример если его немного усложнить разброс будет до 200мс ...

etc
01.08.2007, 10:24
Цитата из хелпа:

Depending on the SWF file's framerate or Flash Player's environment (available memory and other factors), Flash Player may dispatch events at slightly offset intervals. For example, if a SWF file is set to play at 10 frames per second [fps], which is 100 millisecond intervals, but your timer is set to fire an event at 80 milliseconds, Flash Player will fire the event close to the 100 millisecond interval. Memory-intensive scripts may also offset the events.

sourcer21
01.08.2007, 11:27
Помогите пожалуйста.
Задача по сути элементарная.
Надо сделать тоже самое но чтобы точнее было.
тоесть блок кода который срабатывает каждые 10мс как бы вы это реализовали? помогите пожалуйста.
Я просто уже много что перепробоал ну никак.... реуальтат проде того
10мс
12мс
16мс
15мс
70мс
11мс
10мс
12мс

Тоесть даже 70 мс проскакивает часто хотя комп вобще не загружен.
Помогите пожалуйста, я прям в стопоре. :(

vooparker
01.08.2007, 12:02
врядли такое удасться реализовать

sourcer21
01.08.2007, 12:09
тоесть как я понимаю итог один. Задержки просто надо учитывать каким то образом и делать больше действий на такте с учетом задержки такта. Жопа конечно, но ладно. Но всётаки может еще у кого есть какие то идеи?

aksios
01.08.2007, 12:13
Задача по сути элементарная.
Надо сделать тоже самое но чтобы точнее было.

Есть весы с делением 1г. Нужно на них взвесить с точностью до 1 мг. Намек понятен? Задача для флеша не элементарная. В плане изврата, можно кое что предпринять... но это сложно. По крайней мере, один албанец это пробовал решать.

etc
01.08.2007, 12:55
10 мс — слишком маленький интервал, чтобы быть точным.

sourcer21
01.08.2007, 13:00
Поймите что дело не в том что интервал маленький чтобы быть точным давайте зададим интервал 200мс и всёравно будеь 220, 230, 210, 200 и так далее тут просто проблема точности.
вот примеру если бы можно было реализовать следующую конструкцию то это работало но она не может сужествовать просто из за того что просто завесит комп

prev=getTimer();

while(1)
{
if((all=(getTimer()-prev))>=10)
{
trace(all);
prev=getTimer();
}
}

есть какие то идеи как придать жизнь такой конструкции?

etc
01.08.2007, 13:04
Да никак, собственно.

aksios
01.08.2007, 13:30
давайте зададим интервал 200мс и всёравно будеь 220, 230, 210, 200 и так далее тут просто проблема точности.

Ну точность положим вырастет - если понимаете о чем я. Для 200мс погрешность 220 мс составит всего 10%, для 10 мс 70 мс погрешность 600%.
С другой стороны, если взять, положим, 10 значений и выбросить наиболее не верные... а если 50... в принципе, как идея ради идеи это интересно.
:)

__i
01.08.2007, 14:00
1. ЗАЧЕМ интервал в 10 мс во флеше?
2. ЗАЧЕМ такая точность ровно 200мс а не 210 или 220?

ну в довесок, флеш "тикает" где-то на 15-16 мс, т.е. при выполнении кода в определенный момент "фокус" теряеться на этот тик

чтобы проверить - сделай цикл до 1000000 и выводи в нем время разницу времени для каждой итерации, будет гдето так

0
0
0
....
15
0
0
0
....
16
0
...

Usnul
02.08.2007, 02:57
я эмулировал систему где время было критично в плоть до милисекунды распределяя вычисления таким образом что общее время вычисления сохранялось точным в пределах возможностей флэш выигрывателя, таким образом цепочка интервалов (в моем случае команда твина, она кстати выложена где-то в этом разделе мною) состаяла из неточных по времени событий которые выдавали результат с минимальной возможной погрешностью. Когда у тебя есть твин длинной в 1 секунду, и он выполняется за 1.003 секунды или 1.005 секунд, мне не особо важно. Вообще, я не вижу никакой необходимости для такой точности, крмое как для состыковки визуализации, но она ограницена fps, так что в любом случае.. я не вижу причины.