0

コンストラクターに次のものがない場合、コードに問題が発生することがよくあります。

addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);

MovieClipまたはDocumentClassをステージに追加したでコードを実行すると、うまく機能しているように見えます...しかし、これはなぜですか?

4

2 に答える 2

4

このように考えてください。クラスが構築されている場合、次のようなホスティングコードからのものである可能性があります。

var newComponent = new TheComponent();
parentElement.addChild(newComponent)

したがって、コンストラクターでコードを実行している場合は、まだ完全に接続されていないコードを実行していることになります。たとえば、階層にまだ追加されていないため、コンストラクターに親が含まれることはありません。

もちろん、いくつかのことが機能します...たとえば、ビジュアルツリーの一部であることに依存しないコードはすべて機能します。ただし、それがより大きなシステムの一部であることを知ることに依存するコードは、ステージに追加された後に実行する必要があります。

それは役に立ちますか?

于 2011-02-01T01:48:59.357 に答える
1

ブライアンの説明に加えて、ADDED_TO_STAGEは、単一のクラス内のオブジェクトの管理を容易にするためにあります。オブジェクトがそのステージに追加および削除されたときにそれを認識できるようにすることで、オブジェクトが完全に自己管理できるようになります。たとえば、ハンドラーメソッドでアニメーションを開始するか、削除されたときにアニメーションを停止します。通常、そのイベントがなければ、オブジェクトをステージの開始と停止に追加する必要があります。

イベントフレームワークは、特定のイベントがブロードキャストされるたびにメソッド/関数を呼び出す自動化フレームワークと考えてください。ADDED_TO_STAGEはaddChildメソッドにディスパッチされてオブジェクトになるため、カスタムメソッドbind()を呼び出すのと似ています。

package{
 class Main extends Sprite{
  public Main(){
   // called on instantiation.
  }
  public function bind():void{
   //called later in the stack, either by ADDED_TO_STAGE or main.bind()
  }
 }
}

これは、これらのプロパティ(x、y、alpha)がaddChildメソッドで初期化されているためです。これは、メモリ管理上の理由で行われます。オブジェクトがステージに「ヒット」するまで処理されないものに、なぜ数バイトを割り当てるのですか。

于 2011-02-01T02:34:35.750 に答える