Ich habe einen Wrapper um Sprite namens ClickableCircle erstellt, der sich bei der Instanziierung selbst zur Anzeigeliste hinzufügen soll. Hier ist eine Spielzeugversion:ActionScript: Wie wird eine Sprite-Unterklasse instanziiert, die sich selbst zur Bühne hinzufügt?
public class ClickableCircle extends Sprite {
protected var circle:Shape;
protected var myName:String;
public function ClickableCircle(name:String, x:uint, y:uint) {
super();
circle:Shape = new Shape();
circle.graphics.beginFill(0x00ACDC, 1);
circle.graphics.drawCircle(0, 0, 12);
this.myName = name;
this.x = x;
this.y = y;
this.addChild(circle);
this.addEventListener(MouseEvent.CLICK, reportClickedID);
// Here's the problematic line: can't add itself to display list
// Error #1009: Cannot access a property or method of a null object reference.
stage.addChild(this);
trace("Created " + name + " at " + String(x) + ", " + String(y));
}
private function reportClickedID(e:MouseEvent):void {
trace("You just clicked on " + this.myName);
}
}
Das Problem ist, dass, wenn ein ClickableCircle aus der Hauptanwendung instanziiert wird, es stürzt ab, wenn es versucht, sich auf die Bühne hinzuzufügen, bc Stufe null ist. Wenn auf der anderen Seite die addChild() aus dem ClickableCircle Konstruktor kommentiert, und das instanziiert cs wird stattdessen auf die Anzeigeliste in der Hauptanwendungsebene hinzugefügt, funktioniert alles einwandfrei:
public class GreetingApp extends Sprite {
public function GreetingApp() {
var cs:ClickableCircle = new ClickableCircle("joe", 100, 200);
// If the child is added here, everything works.
stage.addChild(cs);
}
}
Da sowohl GreetingApp und ClickableCircle erweitern Sprite, ich würde denken, die Bühne wäre instanziiert und an beiden Orten zugänglich. Ich bin brandneu in ActionScript/Flex, also bin ich mir sicher, dass ich etwas Dummes mache. Kann mir jemand sagen, was es ist?
Vielen Dank! Aus irgendeinem Grund habe ich die Tatsache übersehen, dass die Bühnenreferenz eines DisplayObject nur dann nicht-null wurde, wenn das Objekt explizit zur Display-Liste hinzugefügt wurde - ich dachte, dass es nur eine Bühne in einer Flash-App gibt. Aber jetzt zeigt ein kleines Googeln, dass der Grund, warum es nicht automatisch ist, wahrscheinlich AIR- und sicherheitsbezogen ist. Sehr geschätzt. – shanusmagnus