2009-07-26 55 views
1

如何訪問Costum類中的Stage Class屬性?ActionScript 3.0 stageWidth自定義類

類:

package { 
    import Main; 
    import flash.events.*; 
    import flash.display.Sprite; 
    import flash.display.Stage; 

    public class Run extends Sprite { 
     var obj:a1_spr; 


     public function Run() { 
      runAssets(); 

     } 



     private function runAssets():void { 
      obj = new a1_spr() 
      addChild(obj); 
      obj.x = stage.stageWidth/2; 

     } 
    } 
} 

輸出:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 

回答

2
this.addEventListener(Event.ADDED_TO_STAGE, handleAdedToStage) 

private function handleAddedToStage(event:Event):void 
{ 
    this.runAssets() 
} 

private function runAssets():void 
{ 
    obj = new a1_spr(); 
    addChild(obj); 
    obj.x = this.stage.stageWidth/2; 
} 

你不會有進入階段在構造函數(除非你注入階段進入班上)。精靈有一個階段屬性。

+0

坦克你。有用。但我不確定我明白爲什麼。你能解釋爲什麼我必須與聽衆一起運行嗎? – 2009-07-26 17:39:00

3

要展開什麼喬爾說,並把它的來龍去脈:

每個顯示對象都有一個.stage屬性,但屬性爲空,直到你加你顯示對象到顯示列表上。因此,在構建期間,您將永遠無法訪問它(因爲它之後會被添加)

當您將對象添加到舞臺上時,事件ADDED_TO_STAGE會被觸發,並且您知道.stage屬性現在已被填充。發生這種情況後,您可以從任何地方訪問舞臺上的舞臺。

希望能夠爲您澄清事物。

0

當你用.as文件編譯fla資源時,沒有階段。所以代碼是爲了準備你的文檔類而啓動的,你必須聽聽是否有一個階段,以便它可以呈現。

這就是爲什麼你要聽ADDED_TO_STAGE,來檢查它實際上是否在顯示列表中。

所有顯示對象都會出現此問題,因爲當存在實際階段時,它們必須添加到顯示列表中。

習慣於添加該偵聽器,並檢查舞臺。特別是在團隊中工作時,以及在更大的項目中做自己的組件。