ActionScript AddChild для этапа из класса

Я пытаюсь добавить объект на свою основную сцену с помощью метода addChild(). Обычно при работе внутри самого FLA использование addChild(myObject) работает просто отлично. Однако он не работает во внешнем классе AS.

Все другие учебники, которые я нашел, показали мне, как сделать что-то подобное, что мне не нужно:

var myMovieClip:MovieClip = new MovieClip();
myMovieClip.addChild(myObject); // Works great, but not what I need

Может ли кто-нибудь показать мне, как добавить объект на мою основную сцену через внешний класс AS.

Спасибо за уделенное время.


person Oliver Spryn    schedule 31.05.2011    source источник


Ответы (3)


Если это ваш класс документа или класс, который имеет действительную ссылку на этап, вы можете использовать:

stage.addChild(myObject);

РЕДАКТИРОВАТЬ - Добавлен пример.

Вот пример класса, который расширяет EventDispatcher и передает параметр «стадии».

Во-первых, класс:

package {

    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.EventDispatcher;

    public class MyClass extends EventDispatcher {

        private var _stage:Stage;

        public function MyClass(stage:Stage) {
            _stage = stage;

            var mc:MovieClip = new MovieClip();
            _stage.addChild(mc);
        }
    }
}

И использование (при условии, что это из класса, который имеет ссылку на «стадию»):

var obj:MyClass = new MyClass(null, this.stage);
person Corey    schedule 31.05.2011
comment
Хм... Это кажется немного сложным, так как этот класс уже расширяет EventDispatcher, и мне бы очень хотелось избежать его реализации, так как мне нужно было бы расширять MovieClip. Любые другие обходные пути? - person Oliver Spryn; 01.06.2011
comment
Что расширяет ваш класс? Какую ошибку вы получаете? Если экземпляр вашего класса был добавлен в список отображения, вы должны иметь доступ к этапу, как указано выше... это не обязательно должен быть класс документа. - person Corey; 01.06.2011
comment
Да, мой класс расширяет EventDispatcher. Я относительно новичок в AS3, так что вы имеете в виду добавить в список отображения? - person Oliver Spryn; 01.06.2011
comment
Класс EventDispatcher не имеет ссылки на сцену, поэтому вам нужно будет передать ее ему... либо установив общедоступную переменную, либо параметр в вашем конструкторе. Затем, когда вы создаете экземпляр своего класса, вы можете передать ссылку на этап. - person Corey; 01.06.2011
comment
Потрясающий!!! Это одна из загадок ActionScript, которую я могу считать побежденной! Спасибо за помощь, Кори! - person Oliver Spryn; 01.06.2011
comment
Я думаю, было бы хорошо добавить информацию о прохождении референса этапа прямо в ответ. - person prototypical; 01.06.2011
comment
@prototype - Хорошее предложение. Я добавил пример выше. - person Corey; 02.06.2011

Вы уже пробовали следующее?

stage.addChild(myObject)
person Tieme    schedule 31.05.2011

Метод Кори работает. Вам не нужно расширять EventDispatcher, как это было сделано в его примере.

В его примере важно следующее:

private var _stage:Stage;
public function MyClass(stage:Stage) {
_stage = stage;

var mc:MovieClip = new MovieClip();
 _stage.addChild(mc);
}

Обратите внимание, как он использует переменную _stage, ссылаясь на нее.

person micker    schedule 01.09.2013