Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос по организации кода (http://www.flasher.ru/forum/showthread.php?t=206962)

lesnoj 16.03.2014 03:54

Вопрос по организации кода
 
Ожидаемым результатом является следующее: в основном классе Main через определенный промежуток времени происходит вызов функции, которая отображает экземпляр дополнительного класса Sequence, внутри которого происходит отображение MovieClip`ов по очереди с задержкой с эффектом transitions Fade.

Проблема заключается в том, что объекты из класса Sequence:
1. Возникают резко, без эффекта в начале
2. Появляются не по очереди, а вначале первые два одновременно и затем третий

По логике вроде все верно, возможно проблема в неверной организации кода? Прошу подсказать.

Основной класс Main:

Код AS3:

package {
        import flash.display.MovieClip;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
 
        public class Main extends MovieClip {
                private var timerEvent:Timer = new Timer(2000,1);
                private var sequence:Sequence = new Sequence();
 
                public function Main() {
                        timerEvent.start();
                        timerEvent.addEventListener(TimerEvent.TIMER, timerEventHandler);
                }
 
                public function timerEventHandler(event:TimerEvent):void {
                        sequenceHandler();
                }
 
                public function sequenceHandler():void {
                        sequence.x = 0;
                        sequence.y = 0;
                        this.addChild(sequence);
                }
 
        }
}

Класс Sequence:

Код AS3:

package {
        import flash.display.MovieClip;
        import fl.transitions.*;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
 
        public class Sequence extends MovieClip {
                private var one:One = new One();
                private var oneTimer:Timer = new Timer(1000,1);
 
                private var two:Two = new Two();
                private var twoTimer:Timer = new Timer(2000,1);
 
                private var three:Three = new Three();
                private var threeTimer:Timer = new Timer(3000,1);
 
                public function Sequence() {
                        one.x = 0;
                        one.y = 0;
                        TransitionManager.start(one, {type:Fade, direction:Transition.IN, duration:20});
                        oneTimer.start();
                        oneTimer.addEventListener(TimerEvent.TIMER, oneHandler);
 
                        two.x = 100;
                        two.y = 0;
                        TransitionManager.start(two, {type:Fade, direction:Transition.IN, duration:20});
                        twoTimer.start();
                        twoTimer.addEventListener(TimerEvent.TIMER, twoHandler);
 
                        three.x = 200;
                        three.y = 0;
                        TransitionManager.start(three, {type:Fade, direction:Transition.IN, duration:20});
                        threeTimer.start();
                        threeTimer.addEventListener(TimerEvent.TIMER, threeHandler);                       
                }
 
                public function oneHandler(event:TimerEvent):void {
                        this.addChild(one);
                }
 
                public function twoHandler(event:TimerEvent):void {
                        this.addChild(two);
                }
 
                public function threeHandler(event:TimerEvent):void {
                        this.addChild(three);
                }
 
        }
}

Добавлено через 10 часов 8 минут
Обнаружил ошибку. Если установить таймер в классе Main в значение 0, то проблема исчезает.
Следовательно проблема в том что таймеры в Main и в Sequence начинают отсчет одновременно.

Но как добиться поставленной задачи?
1. Срабатывает таймер в Main
2. Таймер в Main запускает функцию добавления экземпляра класса Sequence
3. В классе Sequence последовательно срабатывают таймеры запускающие добавление объектов в список отображения

olexandr 16.03.2014 15:33

естественно, что таймеры начинают отсчет одновременно
вы же экземпляр Sequence создаете при объявлении.
создание экземпляра:
Код AS3:

new Sequence()

надо перенести в sequenceHandler

lesnoj 19.03.2014 12:58

olexandr, спасибо за подсказку - проблема решена.


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

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