#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, ссылающуюся на него.