Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как добавить больше одного ребёнка на Stage? (http://www.flasher.ru/forum/showthread.php?t=211509)

nelco 14.09.2015 05:51

как добавить больше одного ребёнка на Stage?
 
пытаюсь понять что такое этот [object Stage], просто stage., root... как я понял Stage - это класс c типом DisplayObjectContainer (или расширяющий DisplayObjectContainer) который создаётся по-умолчанию при запуске основного класса приложения из FlashDevelop. Вот тестовый код:

Код AS3:

package zoo.actionscript.stage 
{
 
        import as3Tutorial.scr.FloatingCont;
        import flash.display.Shape;
        import flash.display.Sprite;
        import flash.text.TextField;
 
        public class Main extends Sprite
        {
                private var _tF:TextField;
                private var _container:Sprite;
                private var _shape:Shape;
                private var _someClass:FloatingCont;
 
 
                public function Main()
                {
                        addChild(_tF = new TextField());
                        addChild(_container = new Sprite());
                        addChild(_shape = new Shape());
                        addChild(_someClass = new FloatingCont("C://textForLoad.txt"));
 
                trace (stage.numChildren);       
                trace (this.numChildren);
                }
 
        }
 
}

stage.numChildren возвращает всегда 1, независимо от количества добавляемых DisplayObjectов, значит, навверное, эти DisplayObjectы принадлежат классу Main, а этот Main уже находится в классе Stage? тогда возникает вопрос:
как добавить ещё одного ребёнка для класса Stage? чтобы stage.numChildren было больше 1.

Добавлено через 15 минут
sorry, дошло...
Код AS3:

stage.addChild

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

caseyryan 14.09.2015 06:41

Цитата:

значит stage - он всегда как бы один глобальный? у самих классов нет своего stage отдельного?
Именно так. И не надо на stage ничего добавлять. Элементы нужно распростарнять по своим контейнерам, чтобы был порядок, а не валялось все в куче.
На stage можно добавить какие-нибудь модальные окна с подтверждением действий и т.п., чтобы быть уверенным, что они поверх всего

ZackMercury 14.09.2015 15:00

Вы путаете понятие stage(Область видимости) и DisplayList(Список отображения).
Каждый DisplayObjectContainer имеет свой DisplayList, в который можно добавлять DO/DOC.
Stage - DisplayObjectContainer, это ВСЯ видимая область флешки.
Если написать
Код AS3:

trace(stage.getChildAt(0));

после инициализации, выведет [object Main].
Сам класс Main добавляется в корень видимой области.
У каждого Sprite есть свой DisplayList.
В Main:
Код AS3:

trace(this.numChildren);//0;
trace(stage.numChildren);//1;
trace(stage.getChildAt(0));//[object Main]
 
this.addChild(new Sprite());
trace(this.numChildren); //1
trace(stage.numChildren); //1
trace(this.getChildAt(0)); //[object Sprite]

Как у любого DOC, у stage есть размеры
stage.width
stage.height

Но они показывают размеры самого контейнера, а не всей области.
Т.е. если за пределы флешки выходит какой-то объект, то размеры будут растянуты до него.

Ну и, чтобы получать только размеры флешки как окна, были введены
stage.stageWidth
stage.stageHeight

Ну и root вернёт вам главный класс(object Main). Но за весь опыт программирования я один раз пользовался этим свойством, когда писал в кадрах.


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

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