2012-11-07 38 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。 尝试在阶段初始化之后完成所有工作。