Форум 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)

Babylon 25.10.2013 19:44

Имеется ввиду что как только main добавляется в стейдж вызывается init(); А так как main это экземпляр то сначала отрабатывает конструктор. Я лично так понимаю.

silin 25.10.2013 19:47

Цитата:

Сообщение от Dukobpa3 (Сообщение 1149898)
В конструкторе мы смотрим - стейдж есть (значит уже на стейдже) или нету.

не, не значит
есть ссылка на stage и только в том случае когда флешка запускается прямо в плеере, если подгружается то нет и ссылки
но это не значит, что спрайт уже добавлен, да и как, если он еще не создан ?

Babylon 25.10.2013 19:49

silin, я правильно написал?

silin 25.10.2013 19:57

эта конструкция
Код AS3:

if (stage)init();
else addEventListener(Event.ADDED_TO_STAGE, init);

актуальна для подгружаемых мувиков в случае если в конструкторе(при создании) нужен доступ к stage
для 'головного' мувика ссылка на stage уже есть, поэтому сразу отрабатывает init

Wolsh 25.10.2013 20:50

Цитата:

Имеется ввиду что как только main добавляется в стейдж вызывается init(); А так как main это экземпляр то сначала отрабатывает конструктор. Я лично так понимаю.
Нет. Документ-класс получает ссылку на стейдж волшебным способом ДО того, как будет создан и добавлен. Иначе условие не имело бы смысла. Уберите подписку, обращайтесь сразу к стейдж в конструкторе — и никаких проблем, стейдж есть в конструкторе, а не после него.
Весь этот эпиграф с подпиской только на случай загрузки в другую флэшку.

Akopalipsis 25.10.2013 20:53

silin Спасибо! я кажется разобрался. Так как stage уже есть, срабатывает init(), который создаёт sprite до завершения выполнения конструктора.
Но если честно, то я думал, что пока не добавится Main не может добавиться нечего.

Wolsh 25.10.2013 21:19

Чтобы разобраться надо всего два трейса вставить
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                        trace("Constructor");
                }
 
                private function init(event:Event = null):void
                {
                        trace("Init", event);
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                }
        }
}

Добавлено через 7 минут
Цитата:

пока не добавится Main не может добавиться нечего
Вы же подписываетесь на ADDED а не на ADDED_TO_STAGE.

Akopalipsis 25.10.2013 21:41

Wolsh Спасибо! Капельку рад что разобрался в этом сейчас.

Babylon 25.10.2013 21:48

Уолш, но ведь stage является контейнером. Чтобы добавить экземпляр Main его как минимум надо создать, и следовательно вызвать конструктор.

Akopalipsis 25.10.2013 21:58

У меня тоже вызывает некое недоумение эта ситуация, ведь, как все говорят - мы добавляем обьекты в класс Main. И получается, что добавили ещё до его создания. я эту интригу обьяснил так - пусть майн ещё не создан, но мы и не добавляем не чего в майн, мы ведь тип режим ДОКом. И тогда само напрашивается, что ДОК тоже есть сразу.


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

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