PDA

Просмотр полной версии : как добавить больше одного ребёнка на Stage?


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

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, дошло... 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, это ВСЯ видимая область флешки.
Если написать
trace(stage.getChildAt(0));
после инициализации, выведет [object Main].
Сам класс Main добавляется в корень видимой области.
У каждого Sprite есть свой DisplayList.
В Main:
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). Но за весь опыт программирования я один раз пользовался этим свойством, когда писал в кадрах.