Просмотр полной версии : возможно ли сделать таймер в одном кадре?
Timophey
04.04.2002, 15:10
обьясните почему следующий код не работает?
time=new Date();
sec=time.getMilliseconds();
time_out=sec+1000;
while(sec<>time_out){
sec=time.getMilliseconds();
}
ok=1;
stop();
и возможно ли сделать таймер в одном кадре???
oldt = getTimer();
while(getTimer()-oldt<10000);
trace("OPS");
Не работает, скорее всего потому, что ты проверяешь на точное равенство. Проверяй на больше-меньше - будет работать.
Только это всё равно неправильно - задерживать весь клип на одном кадре. К тому же, если количество экшнов превысит некое число (насколько я помню - 300000), то весь таймер накроется медным тазом.
DeliMIter
04.04.2002, 20:45
Ну вы блин даете...
_time = getTimer();
onEnterFrame = function() {
if (getTimer() - _time > _timeout) play();
}
stop();
onEnterFrame плох тем, что исполняется, даже если мув остановлен. Надо либо удалять мув, либо забить на производительность. Пока что лучше двух/трехкадрового цикла ничего не придумано.
[subway]design
04.04.2002, 21:12
Ну хорошо... Хотите универсальности? Вот она вам:
function delay_playing(obj,delay,name,depth){
obj.stop();
_root.createEmptyMovieClip(name,depth);
cur_time = _root[name].getTimer();
_root[name].onEnterFrame=function(){
if (this.getTimer() - cur_time > delay){
obj.play();
this.removeMovieClip();
}
}
}
Вызов:
_root.delay_playing(_root.mega_clip,10000,"timer1",999);
А теперь то же самое - для пятёрки. Ага?
[subway]design
04.04.2002, 21:22
А теперь то же самое - для пятёрки. Ага?
Я же сказал: Хотите универсальности? :)
А, вообще, вот:
Пустой клип: stop_timer
Linkage properties: export this symbol / export for ActionScript... name=stop_timer
Первый кадр/второй кадр stop_timer:
if (this.getTimer() - cur_time > delay){
obj.play();
this.removeMovieClip();
}
Первый кадр сцены/_root'а:
function delay_playing(obj,delay,name,depth){
_root.attachMovie("stop_timer",name,depth);
_root[name].obj=obj;
_root[name].delay=delay;
}
Вызов:
_root.delay_playing(_root.mega_clip,10000,"timer1",999);
Таким образом, ответ на вопрос, поставленный автором топика, такой: в пятёрке - нельзя, в эмыксе - можно :D
В пятёре, на самом деле, можно и в одном кадре, но ценой тормозов, либо извращёнными способами, которые не оправдывают затрат - в двух кадрах проще.
Timophey
05.04.2002, 15:41
TO: Useless
очень жалко, что в пятом нельзя так сделать, а эмыксом пока не пользоваться не приходилось, кстати видел ли его кто в продаже в москве?
...как сделать таймер в двух кадрах я знаю, но это для моей задачи не подходит, тк таймер нужен как функция.
[subway]design
05.04.2002, 17:43
Млин! Ну и что, что он в 2-х кадрах! Эти же два кадра лежат в обособленном специализированном муве и никому не мешают! А если тебе нужна функция - посмотри на мой предыдущий пост - там функция при вызове аттачит этот мув-таймер, передает ему объект, в котором надо остановить анимацию, задержку в миллисекундах, а также ненужные параметры "имя таймера" и "глубина вложенности". Теперь, если у тебя в корне сцены есть анимация, то ты можешь ее остановить на 5 секунд, вызвав эту функцию: _root.delay_playing(_root,5000,"timer1",999);
В данной ситуации двухкадровая система не мешает ничему!
Это и есть ответ на твой вопрос:
...как сделать таймер в двух кадрах я знаю, но это для моей задачи не подходит, т.к. таймер нужен как функция.
DeliMIter
05.04.2002, 19:12
Для пятерки делаем в нужном месте пустой клип и вешаем на него
onClipEvent (enterFrame) {
if (some_condition) _parent.onTimer();
}
Соответственно в родителе прописываем условие вызова и функцию onTimer();
И все.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.