2011-04-29 62 views
1

我試圖從外部類更改舞臺上的文本字段,但它不起作用。 那是我多努力,它的代碼:如何在as3中從外部類更改舞臺上的文本字段

package 
{ 
    import flash.display.*; 
    import flash.text.TextField; 

    public class Exp extends Sprite 
    { 
     public function Exp() 
     { 
      trace(stage.getChildByName("abc")); 
      TextField(stage.getChildByName("abc")).text = "abc"; 

     } 

    } 

} 

在我的舞臺我有一個文本框至極動態與實例名稱:「ABC」。 但是每次我啓動程序時,flash都會告訴我stage.getChildByName(「abc」)將是一個空對象。

我希望有人能幫助我。

回答

1

我從來沒有使用getChildyName前..你可以使用這個:

var rt:MovieClip = MovieClip(root); 
trace(rt["abc"]); 

或更短:

trace(MovieClip(root)["abc"]); 

如果你的例子是在文檔類 -

package 
{ 
    import flash.display.MovieClip; 
    import flash.text.TextField; 

    public class Exp extends MovieClip 
    { 

     public function Exp() 
     { 
      var r:MovieClip = MovieClip(root); 

      TextField(r["abc"]).text = "abc"; 
     } 
    } 
} 
+0

如果他沒有訪問階段,那麼init()函數會拋出一個空指針異常。 – divillysausages 2011-04-29 12:38:50

+0

不正確,你可以看到 - addChild(exp)在init()被調用之前被調用。這個答案假設這不是文檔類..嗯。 – Marty 2011-04-29 12:41:18

+0

但是這是舞臺的主要類別。所以它應該能夠進入舞臺,不是嗎? – 2011-04-29 12:52:46

0

我知道這個問題已經接受了一個答案,但我認爲這是一個更好的答案:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.text.TextField; 

    public class Main extends Sprite 
    { 
     private var _textField:TextField; 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 

     }// end function 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var textField:TextField = new TextField(); 
      textField.name = "abc"; 
      stage.addChild(textField); 

      _textField = TextField(stage.getChildByName("abc")); 

      trace(_textField.name); // output: abc 

     }// end function 

    }// end class 

}// end package