Я построил простую змеиную игру, в которой используется класс Main (это мой класс документов), класс Snake и класс Food. Основной класс создает новый объект класса Snake и еще один класс Food. В обоих классах Змеи и еды, я делаю спрайтов так: телоstage.removeChild throwing error
var segment:Sprite = new Sprite();
segment.graphics.beginFill(0xFFFFFF);
segment.graphics.drawRect(0, 0, 10, 10);
segment.filters = [new GlowFilter(0xFF6699, .50, 3, 3, 2, 2, false, false)];
segment.graphics.endFill();
segment.x = x;
segment.y = y;
this.stage.addChild(segment);
this.segments.push(segment);
змеи хранится в массиве спрайтов называемых segments
. Из этого кода вы можете видеть, что я делаю новый спрайт, чтобы продлить длину змеи и надавить на массив сегментов. Я делаю что-то подобное для любых продуктов питания, кроме как в классе продуктов питания. Я определил пищевой спрайт как public var foodSprite:Sprite;
, потому что мне нужен только один на сцене одновременно.
Теперь, когда я вызываю метод gameOver()
из основного класса (где у меня есть игровой цикл), я хочу позвонить stage.removeChild()
на каждый из сегментов змей и справку. Я попытался сделать это:
for(var i:Number = 0; i < this.snake.segments.length; i++)
{
stage.removeChild(this.snake.segments[i]);
}
Но я получаю эту ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/gameOver()
Из того, что я знаю, что это должно работать, так как this.snake.segments[i]
указывает на спрайт, тот, который я хочу, чтобы удалить со сцены ,
Что здесь может быть не так? Спасибо.
EDIT: Я думаю, это также стоит отметить, что segments
определяется как:
public var segments:Array = new Array;
Вы можете использовать '[]' вместо 'новый Array () '. 'public var segment: Array = [];' – Marty