AS3 - Как вы игнорируете класс (Ошибка № 1009)?
Я создал класс для MovieClip, создавая монеты для игрока (char), чтобы забрать. Предполагается, что все, что нужно сделать классу - это добавить к счету и монетам собранные переменные, а затем убрать одну монету со сцены. Но когда я меняю кадр, используя gotoAndStop(#);
консольная спам
ErrorType: Ошибка #1009: невозможно получить доступ к свойству или методу пустой ссылки на объект."
Класс монет:
public class coin extends MovieClip{
var char:MovieClip;
var MainTimeLine = MovieClip(root);
public function coin() {
// constructor code
this.addEventListener(Event.ENTER_FRAME,update);
}
function update(event:Event):void{
if(MainTimeLine.currentFrame!=5){
char=MovieClip(root).char;
if(this.hitTestObject(char)){
this.removeEventListener(Event.ENTER_FRAME,update);
parent.removeChild(this);
MainTimeLine.score++;
MainTimeLine.coinscollected++;
}
}
}
}
1 ответ
Решение
Корень не заполняется, пока ваш экранный объект не будет добавлен в список отображения. Вы должны прослушать это событие перед установкой переменной.
var char:MovieClip;
var MainTimeLine; //do not initialize here, root is null at this point
public function coin() {
// constructor code
//root is still null here sometimes too, so see if it's populated yet
if(root){
init(); //root is populated, skip to initialization
}else{
this.addEventListener(Event.ADDED_TO_STAGE,addedToStage); //root isn't populated yet, listen for added to stage and then initialize
}
}
private function addedToStage(e:Event = null):void {
this.removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
init();
}
private function init():void {
MainTimeLine = MovieClip(root)
this.addEventListener(Event.ENTER_FRAME,update);
}