2009-07-21 6 views
4

私はFlash CS4で小さなコンポーネントを作成しました。MyCompシンボルをそれぞれのMyCompクラスに関連付けました。 Flash CS4 - コンポーネントインスペクタ、プロパティは常にnullですか?

package { 
    import flash.display.MovieClip; 

    public class MyComp extends MovieClip 
    { 
     public function MyComp() 
     { 
      trace(this.test); 
     } 

     private var _test:String; 

     [Inspectable(defaultValue="blah")] 
     public function get test():String 
     { 
      return this._test; 
     } 

     public function set test(v:String):void 
     { 
      this._test = v; 
     } 
    } 
} 

私はテストFLAにコンポーネントをドラッグ

は、コンポーネントのプロパティは、すべての検査可能[]メタタグあたりとして表示され、次のようMyComp.as内のコードが見えます。しかし、コンポーネントインスペクタでプロパティを設定すると、コンポーネントインスペクタの説明にもかかわらず、値は常にnullになります。

たとえば、testをトレースすると、常にnullが出力されますか?

実行時にコンポーネントインスペクタの値をコンポーネントに反映させるにはどうすればよいですか?

答えて

4

コンポーネントと検査可能なプロパティの操作の順序はちょっと難しいかもしれません。キース・ピーターズ(Bit-101)はa nice overview of the problems with inspectable getters and settersを書いた。

特に、コンストラクタは、設定されている検査可能プロパティの前に呼び出されるという問題があります。この問題を回避するには、コンストラクタがEXIT_FRAMEイベントのリスナーを設定するようにしてください。これは、他のすべてが完了した直後に、同じフレームで実行されます。あなたはちょうどこのようなテキスト文字列「exitFrameの」、使用することができます

package { 

    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class SampleComponent extends MovieClip { 

     private var _foo:Number; 

     public function SampleComponent() { 
      trace("SampleComponent: constructor"); 
      addEventListener(Event.EXIT_FRAME, onReady); 
     } 

     [Inspectable] 
     public function get foo():Number { 
      trace("SampleComponent: get foo: " + _foo); 
      return _foo; 
     } 

     public function set foo(value:Number):void { 
      trace("SampleComponent: set foo: " + value); 
      _foo = value; 
     } 

     private function onReady(event:Event):void { 
      trace("SampleComponent: ready!"); 
      removeEventListener(Event.EXIT_FRAME, onReady); 
     } 
    } 
} 
+0

リンクありがとうBranden!私は2週間頭皮から頭髪を引き抜いていて、仕事をすることができません。まもなく私が解決策を見いだすことができるかどうかを知りましょう。 –

+0

上記のリンクを読んだ後、コンポーネントが初期化を完了する前に、私の問題がコンストラクタでトレースされていることがわかりました。同様にADDED_TO_STAGEイベントなどで再試行します。投稿ありがとう! –

+0

Mmm。 ADDED_TO_STAGEでは、まだヌルです。したがって、まだ早すぎます。コンポーネントの作成/初期化時にFlashがイベントを発生させますか? –

1

:たとえば

addEventListener("exitFrame", onExitFrame); 

イベントが発生し、Eventクラスがちょうど定義が欠落しているようです。

関連する問題