2011-09-26 82 views
0

這是我試圖實例化爲我的主類的類:的addChild定製類AS3

public class Character extends Sprite { 

    [Embed(source='../lib/front1.svg')] 
    private var front1Class:Class; 
    private var crosshair:Sprite = new front1Class(); 

    public function Character() { 
     trace("started"); 
     Mouse.hide(); 

     crosshair.scaleX = 5; 
     crosshair.scaleY = 5; 
     this.addChild(crosshair); 

     stage.addEventListener(Event.ENTER_FRAME, MrEveryFrame); 
     stage.addEventListener(MouseEvent.CLICK, click); 
    } 


    private function click(evt:MouseEvent):void { 
     trace("clicked @ " + evt.stageX + "," + evt.stageY); 

    } 
    public function MrEveryFrame(e:Event):void 
    { 
     crosshair.x = mouseX - 15; 
     crosshair.y = mouseY - 15; 


    } 

} 

當我將它設置爲文檔類,它工作正常。

但是......當我提出這是我的文檔類,並試圖從那裏調用它:

public class Shell extends Sprite 
{ 


    private var character:Sprite = new Character(); 


    public function Shell() 
    { 

     addChild(character); 


    } 


} 

它打破,而不再顯示Sprite對象(儘管它抹去的鼠標指針)。

這裏的交易是什麼?您不能將自定義精靈或動畫片段類實例化爲DisplayObject類?

+1

做內部字符一個跟蹤:跟蹤(「階段存在嗎?「+階段);實例化時可能爲空。 – meddlingwithfire

+0

如果您在構造函數中擴展Sprite,則需要調用'super();'來獲取屬於Sprite的所有內容。所以,就在你的行跟蹤(「開始」)之前;'添加行'super();'看看是否有幫助。 – Ian

回答

2

構造函數中的階段是null。這隻有當你的類是文檔類時纔有效,正如你自己發現的那樣。因此,改變你的構造是這樣的:

public function Character() { 
    trace("started"); 
    Mouse.hide(); 

    crosshair.scaleX = 5; 
    crosshair.scaleY = 5; 
    this.addChild(crosshair); 

    addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
} 

private function onAddedToStage(event:Event):void 
{ 

    stage.addEventListener(Event.ENTER_FRAME, MrEveryFrame); 
    stage.addEventListener(MouseEvent.CLICK, click); 
} 

添加監聽者將訪問階段是唯一的後階段,並將它添加十字線後不再null

+0

這解決了我的問題,不確定爲什麼處理程序正在終止我的精靈顯示,但現在可以工作,謝謝 –