2012-11-07 68 views
2

所以我有一個類:在類{} AS3的addChild()不工作

package 
{ 
    public final class Main extends Sprite 
    { 
     private var TextHolder:Sprite = new Sprite(); 

     public function Main():void 
     { 
      spawnHolder(); 
     } 
     private function spawnHolder():void 
     { 
      TextHolder.graphics.beginFill(0xFFFFFF); 
      TextHolder.graphics.drawRect(0, 0, 100, 80); 
      TextHolder.graphics.endFill(); 
      stage.addChild(TextHolder); 
     } 
    } 
} 

但問題是..我沒有看到舞臺上的任何東西。這主要是類文件類btw。

如果有人能幫助我,我會非常感激! 在此先感謝。

〜Gg

+1

僅僅因爲它表示'[object Sprite]'並不意味着它在顯示列表中。它只是表示它是'Sprite'類型的對象。 –

+0

用FlashDevelop在黑色背景下運行代碼,並且工作正常。它可能是你的環境中的東西。我建議調試並檢查它是否實際添加到舞臺並檢查顏色。 –

回答

1

在顯示對象被添加到舞臺之前舞臺不可用。在這種情況發生之前它將爲空。

package 
{ 
    public final class Main extends Sprite 
    { 
     private var TextHolder:Sprite = new Sprite(); 

     public function Main():void 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE,spawnHolder); 
     } 
     private function spawnHolder():void 
     { 
      TextHolder.graphics.beginFill(0xFFFFFF); 
      TextHolder.graphics.drawRect(0, 0, 100, 80); 
      TextHolder.graphics.endFill(); 
      stage.addChild(TextHolder); 
     } 
    } 
} 
+0

如果在添加事件偵聽器之前測試'if(stage)',則更好,如果計算結果爲true,則直接調用'spawnHolder':if(stage)spawnHolder()else this.addEventListener(Event.ADDED_TO_STAGE,spawnHolder); ' – JcFx

+0

@JCFx你也遺漏了事件監聽器沒有被刪除:) –

+0

heh。 Pedants匿名會把我從他們內心的圈子裏扔出來...... :) – JcFx

0

嘗試更改顏色,可能您的文檔背景也是白色。 不要使用類似TextHolder這樣的大寫字母來代替變量,而應該使用textHolder。 嘗試在階段初始化之後完成所有工作。