Я построил простую игру со змеями, в которой используется класс Main (это мой класс документов), класс Snake и класс Food. Класс Main создает новый объект класса Snake, а другой - класса Food. В классах Snake и Food я делаю спрайты примерно так:
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()
из класса Main (где у меня есть игровой цикл), я хочу вызвать 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]
указывает на спрайт, которого я хочу удалить со сцены.
Что здесь может пойти не так? Спасибо.
РЕДАКТИРОВАТЬ: Я думаю, также стоит отметить, что segments
определяется как:
public var segments:Array = new Array;