Я создал простую игру про змей, в которой используется класс 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;
[]
вместоnew Array()
.public var segments:Array = [];
- person Marty   schedule 30.03.2012