stage.removeChild抛出错误

时间:2012-03-29 23:50:38

标签: actionscript-3 flash actionscript removechild

我已经构建了一个简单的蛇游戏,它使用Main类(这是我的文档类),Snake类和Food类。 Main类创建了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的精灵中。您可以从该代码中看到我正在创建一个新的精灵来扩展蛇的长度并将其推送到segments数组。我为食物做了类似的事情,除了在食物类中我将食物精灵定义为public var foodSprite:Sprite;因为我一次只需要一个在舞台上。

现在,当我从Main类(我的游戏循环中)调用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]指向一个精灵,我想从舞台上删除它。

这里可能出现什么问题?谢谢。

编辑:我想还值得注意的是segments定义为:

public var segments:Array = new Array;

1 个答案:

答案 0 :(得分:0)

  

有关实际解决方案,请参阅此答案的评论。

试试这个:

for(var i:Number = 0; i < snake.segments.length; i++)
{
    var seg:Sprite = snake.segments[i] as Sprite;

    if(seg.parent)
        seg.parent.removeChild(seg);
}