ActionScript добавляет дочерний элемент в стадию из класса

#php #actionscript-3 #oop #class #addchild

#php #actionscript-3 #ооп #класс #addchild

Вопрос:

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

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

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

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

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

Ответ №1:

Если это ваш класс document или класс, у которого есть допустимая ссылка на stage, вы могли бы использовать:

 stage.addChild(myObject);
  

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

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

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

 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);
        }
    }
}
  

И использование (при условии, что это из класса, который имеет ссылку на ‘stage’):

 var obj:MyClass = new MyClass(null, this.stage);
  

Комментарии:

1. Хм… Это кажется немного сложным сделать, поскольку этот класс уже расширяет EventDispatcher, и я бы действительно хотел избежать необходимости его реализации, поскольку мне нужно было бы расширить MovieClip. Есть какие-нибудь другие обходные пути?

2. Что расширяет ваш класс? Какую ошибку вы получаете? Если экземпляр вашего класса был добавлен в список отображения, вы должны иметь возможность получить доступ к этапу, как указано above…it не обязательно должен быть классом document.

3. Да, мой класс расширяет EventDispatcher. Я относительно новичок в AS3, итак, что значит «добавлен в список отображения»?

4. Класс EventDispatcher не имеет ссылки на stage, поэтому вам нужно будет передать ему ссылку … либо путем настройки общедоступной переменной, либо параметра в вашем конструкторе. Затем, когда вы создаете экземпляр своего класса, вы можете передать ссылку на stage.

5. Я думаю, было бы неплохо добавить информацию о передаче ссылки на этап непосредственно к ответу.

Ответ №2:

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

 stage.addChild(myObject)
  

Ответ №3:

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

Что важно в его примере, так это:

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

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

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