Ich habe ein einfaches Snake-Spiel gebaut, das eine Main-Klasse (das ist meine Dokumentenklasse), eine Snake-Klasse und eine Food-Klasse verwendet. Die Main-Klasse erstellt ein neues Objekt der Snake-Klasse und ein weiteres der Food-Klasse. Sowohl in der Schlange und Lebensmittelklassen, mache ich Sprites wie so:stage.removeChild Fehler melden
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);
Die körper Schlange ist in einer Reihe von Sprites gespeichert segments
genannt. Sie können aus diesem Code sehen, dass ich ein neues Sprite mache, um die Länge der Schlange zu verlängern und sie auf das Segmentarray zu schieben. Ich mache etwas ähnliches für irgendwelche Nahrungsmittel, außer innerhalb der Essensklasse, die ich den Essensprite als public var foodSprite:Sprite;
definiert habe, weil ich nur einen auf der Bühne zu einer Zeit brauche.
Jetzt, wenn ich die gameOver()
Methode aus der Main-Klasse aufrufen (wo ich meine Spielschleife habe), möchte ich stage.removeChild()
auf jedem der Schlangensegmente und das Essen Sprite aufrufen. Ich habe versucht, dies zu tun:
for(var i:Number = 0; i < this.snake.segments.length; i++)
{
stage.removeChild(this.snake.segments[i]);
}
Aber ich bekomme diese Fehlermeldung:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/gameOver()
Von dem, was ich weiß, dass dies funktionieren soll, wie this.snake.segments[i]
Punkte auf einen Sprit, das eines, die ich von der Bühne entfernt werden soll .
Was könnte hier schiefgehen? Vielen Dank.
EDIT: Ich denke, dass segments
Bemerken auch wert ist wie folgt definiert:
public var segments:Array = new Array;
Sie können '[]' statt 'new Array verwenden () '. 'public var segments: Array = [];' – Marty