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

catyoshi 27.05.2009 17:14

свойство stage
 
есть задача. нужно в методе некоторого класса добавить объект на рабочую поверхность (stage)

Код:


public class MyClass extends MovieClip {

  public function someMethod () {
    ....
    stage.addChild( child );
  }

}

правильно ли я понимаю, что здесь свойство stage которое наследуется от DisplayObject (MyClass -> MovieClip -> Sprite -> ... -> DisplayObject) должно указывать на рабочую область?


Код:

var mc:MyClass = new MyClass ();
mc.someMethod();

бросает ошибку, что stage null.

что нужно сделать, чтобы добавить объект на рабочую поверхность (на самый верхний уровень)?

Snut 27.05.2009 17:21

стеджа у этого класса нет, так как нет ссылки на стейдж. можно передать классу в конструктор стейдж от меин класса приложения и ставить уже в него.

silin 27.05.2009 17:23

stage есть, но
"If a display object is not added to the display list, its stage property is set to null."

т.е. или дождаться (Event.ADDED_TO_STAGE) когда stage будет определен
или пользоваться после явного addChild объекта (и его родителей тоже)

catyoshi 27.05.2009 17:31

мм.. т.е. я сначала должен добавить экземпляр моего класса MyClass на stage, и только потом у меня внутри экземпляра MyClass появится не null'овое значение свойства stage?

тогда вопрос. а может ли экземпляр MyClass сам добавиться на stage (спровоцировать событие Event.ADDED_TO_STAGE)?

2Snut: спсисбо за совет. я пока так и сделаю

Snut 27.05.2009 17:34

Сори, я просто вопрос не понял. А сам добавится.... это что-то из области фантастики, если нет ссылки на стейдж всего приложения то не сможет

*ушел проверять*

Добавлено через 4 минуты
Код AS3:

package {
        import flash.display.Sprite;
 
        [SWF(width="1000", height="600", frameRate="24")]
        public class TestVisual extends Sprite {
                public function TestVisual() {
                        var sa:SelfAdder = new SelfAdder( super.stage );
                }
        }       
}
 
import flash.display.Sprite;
import flash.display.Stage;
 
 
internal class SelfAdder extends Sprite {
 
        private var _stage:Stage;
 
        public function SelfAdder(stage:Stage) {
                this._stage = stage;
 
                if (this._stage) {
                        super.graphics.beginFill(0xFF0000);
                        super.graphics.drawCircle(100, 100, 100);
                        super.graphics.endFill();
 
                        this._stage.addChild( this );
                }
        }
}

вот так сможет добавится сам на сцену

etc 27.05.2009 19:31

Цитата:

Сообщение от catyoshi (Сообщение 823634)
а может ли экземпляр MyClass сам добавиться на stage (спровоцировать событие Event.ADDED_TO_STAGE)?

Без ссылки на stage только одним единственным способом, но описывать его не буду, т. к. один фиг в релизе не работает.

Snut 28.05.2009 00:07

Цитата:

Сообщение от __etc (Сообщение 823694)
Без ссылки на stage только одним единственным способом, но описывать его не буду, т. к. один фиг в релизе не работает.

Опиши, мне интересно

BlooDHounD 28.05.2009 00:55

Snut, в блоге ищи.


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

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