Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Очередь добавления в DOC (http://www.flasher.ru/forum/showthread.php?t=204271)

Akopalipsis 25.10.2013 18:32

Очередь добавления в DOC
 
Вообще я очень удивлён, так как считал, что когда мы документ класс подписываем под ADDED_TO_STAGE,
то код в обработчике событий выполнится только после добавления Main на stage и как я считал ( наверное ошибочно ), что именно в этот момент, он добавится и DOC. Неужели Main добавляется в DOC только тогда, когда, что то добавится в Main?

in4core 25.10.2013 19:01

Что за ахинея. С чего вы решили, что пока в мейник не добавлено ничего, его нет? Конечно же есть. Открытие окна ( при компиляции ) это и есть ваш мейн по сути. Мейн на стейдж добавляется автоматически, в случае если это не подгружаемая флешка. Посему в констуркторе основного мейна достаточно init() без всяких эддед ту стейдж и проверок

Akopalipsis 25.10.2013 19:06

in4core сейчас я расскажу Вам в чём дело.
От кода ниже я ожидал, что сначала в ДОК добавится Main, а уже потом Sprite.
Но на деле наоборот.
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
                private var _view:View;
                public function Main()
                {
                        if (stage)init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(event:Event=null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        _view = new View(this);
                        var sprite:Sprite = new Sprite();
                        _view.addedChild(sprite);
                }
        }
}

Код AS3:

package 
{
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
        import flash.events.Event;
 
        public class View
        {
                private var _doc:DisplayObjectContainer;
 
                public function View(doc:DisplayObjectContainer)
                {
                        _doc = doc;
                        _doc.addEventListener(Event.ADDED, doc_addedHandler);
                }
                public function addedChild(child:DisplayObject):void
                {
                        _doc.addChild(child as DisplayObject);
                }
                private function doc_addedHandler(event:Event):void
                {
                        trace(event.target);
                }
 
        }
}


Dukobpa3 25.10.2013 19:15

_doc это и есть мейн.
На момент создания _view - он уже на стейдже, соответственно событие не отрабатывает.

Babylon 25.10.2013 19:23

Надо заметить что main на стейдж не добавляется:)

silin 25.10.2013 19:29

>>На момент создания _view - он уже на стейдже

не, на стейдж он попадет после того как конструктор отработает
т.е. первый вызов от добавления спрайта, второй от добавления самого main
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
                private var _view:View;
                public function Main()
                {
                        _view = new View(this);
                        var sprite:Sprite = new Sprite();
                        _view.addedChild(sprite);
                        trace("consructor comleted");
                }
        }
}

Добавлено через 57 секунд
>>Надо заметить что main на стейдж не добавляется
это почему ?

Babylon 25.10.2013 19:32

что значит добавляется main?

silin 25.10.2013 19:37

>>что значит добавляется main?
значит что экземпляр документ класса добавляется как child на stage

Babylon 25.10.2013 19:39

спасибо за разъяснение

Dukobpa3 25.10.2013 19:40

Цитата:

не, на стейдж он попадет после того как конструктор отработает
Че-то я не понял.
В конструкторе мы смотрим - стейдж есть (значит уже на стейдже) или нету. Если нету - то асинхронная подписка.
В любом случае в ините мейн уже на стейдже, как бы там события не развивались до этого.


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

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