Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите разобратся с Timer() (http://www.flasher.ru/forum/showthread.php?t=167047)

wolhw 07.09.2011 20:15

Помогите разобратся с Timer()
 
Хочу организовать контролированое ускорение спавна обьектов, делаю ето так:
Код AS3:

        private var timer_raund: Timer;
        private var timer_secunda: Timer;
        private var timer_faster: Timer;
        private const MIN_del: int=300;
        private const startDel: int=1100;
        private var faster_delay: int=startDel;
        private var tick_del: int=10;
 
        // timer-----------------------------------------
        public function ModelCore()
        {
                super();
 
                timer_raund=new Timer(raundLen);
                timer_raund.addEventListener(TimerEvent.TIMER,tick_raundEnd);
                timer_secunda=new Timer(1000);
                timer_secunda.addEventListener(TimerEvent.TIMER,tick_secunda);
                timer_faster=new Timer(faster_delay);
                timer_faster.addEventListener(TimerEvent.TIMER,tick_faster);
        }
 
private function tick_secunda(event: TimerEvent): void
        {
                if(timer_faster.delay>MIN_del){
                        faster_delay-=tick_del;
                timer_faster.delay=faster_delay;
                }
                // event.updateAfterEvent();
                secunda();
        }
 
        private function tick_faster(e: TimerEvent): void
        {
                trace(e.target.delay);
 
                spam();
                // e.updateAfterEvent();
        }
 
private function secunda(): void
        {
                secundomir--;
                dispatchEvent(new Event(Model.SECUNDA));
        }
 
private function tick_raundEnd(event: TimerEvent): void
        {
                timer_raund.stop();
                timer_secunda.stop();
                timer_faster.stop();
                faster_delay=startDel;
                secundomir=0;
                dispatchEvent(new Event(Model.END_ROUND));
        }
 
        public function startRaund(): void
        {       
                timer_faster.start();
                timer_raund.start();
                timer_secunda.start();
 
                secundomir=raundLen/1000;
 
                dispatchEvent(new Event(Model.START_ROUND));
        }

проц загружен на 30%

1. почему когда startDel > 960(вычислил експрериментальным путем) спавн начинается с задержкой больше 5 сек?
2. delay трейсит что меняет но на самом деле ускорятся начинает только когда daley < 500 делая ето мгновенно, а мне нужно плавное ускорение.
И если можно както подругому без таймеров и фреймов реализовать ускорение подскажите как плиз:o

Wolsh 07.09.2011 21:06

Уменьшать не время, а расстояние/угол, проходимые за один "шаг" (один "тик")?
Используйте готовые твины (Tweener, Greensock TweenLite/TweenMax) или напишите свой для конкретной задачи.

wolhw 07.09.2011 21:17

уточню: нужно увеличение количества созданных обьектов в секунду.
Код AS3:

function spam():void
{
obj=new MyObj();
addChild(obj);
}


Azo 07.09.2011 22:20

Используйте greenshok.

Wolsh 07.09.2011 23:15

Цитата:

нужно увеличение количества
Ну ничего страшного. Создаете свойство с начальным значением количества, создаете твин, в котором указываете максимальное количество за шаг, время, за которое надо дойти до этого показателя, и функцию, управляющую графиком изменения. В обработчике на каждый шаг (onUpdate или как-то так у гринсока) запускаете цикл от ноля до текущего значения этого свойства (твин будет его менять), и в этом цикле на каждую итерацию создаете новый объект и добавляете в дисплей лист. Вот и управление количеством.

wolhw 07.09.2011 23:25

спасибо попробую так, но все же почему таймеры неработают?

Добавлено через 34 минуты
если упростить мой код(ато оч много текста)----


Код AS3:

var timer1:Timer;
var timer2:Timer;
 
function onTimer1(e:TimerEvent):void
{
timer2.delay-=10;
}
 
function onTimer2(e:TimerEvent):void
{
//похоже проблема в етом, свойство delay несоответствует реальному шагу("тику")????!!!!!
//

хих думалось клас Таймер ето основа и зеленыйНосок тоже на нем базируется, но видимо я ошибался, чтож буду ковырять библиотеку носка...

Wolsh 08.09.2011 01:31

Ну вообщето при присвоении свойству delay нового значения во время работы таймера тот перезапускается. Тогда, скажем, он уже отсчитал 100 миллисекунд из 110, и тут другой таймер задал ему новое значение - 90. Первый таймер начинает считать 90 миллисекунд СНАЧАЛА, и значит реальный промежуток между событиями составит 100 + 90 = 190 миллисекунд.
В Вашем случае проще увеличивать кол-во итераций в цикле добавления новых объектов, тем более что, как я понял, Вам нужно обычное равноускоренное увеличение.. Можно просто спрашивать у таймера currentCount, умножать на 10 (к примеру) и создавать в цикле именно столько объектов - 10, 20, 30, 40...

Bgg 08.09.2011 01:41

Плюс: Не рекомендуется задавать свойству delay значение меньше 20 миллисекунд. Частота объекта Timer ограничена 60 кадрами в секунду, то есть задержка меньше 16,6 миллисекунд вызывает проблемы во время выполнения.

wolhw 08.09.2011 02:57

Да, теперь все сложилось)), надо почаще в справку заглядывать хм.
Цыкл мне неподойдет обьекты мне нужно по одному бросать а не групой,
решение наверное ето event.delay (когда таймер сам себя перезапускает с новым значением делей ну и регулировать просто ето значение учитывая уже предыдущее ускорение)


Часовой пояс GMT +4, время: 12:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.