0

メイン ステージに既に 2 つの TLF テキスト ボックスが配置されています。プロパティ インスペクタ ウィンドウで、これらに「txt1」と「txt2」というインスタンス名を付けます。

私は単一のマウスアップイベントを作成しようとしており、それが発生したテキストボックスを見つけようとしています。

私のドキュメント クラスには次のコードがあります。

package  {
import flash.display.Sprite;
import flash.events.KeyboardEvent;

public class SingleEvent extends Sprite{

    public function SingleEvent() {
        // constructor code
        root.addEventListener(KeyboardEvent.KEY_UP, textChanged,false,0,true);
    }

    private function textChanged(e:KeyboardEvent){
        trace(e.target.name);
        trace("   " + e.target);
        switch(e.target){
            case txt1:
                trace("txt1 is active");
                break;
            case txt2:
                trace("txt2 is active");
                break;
            default:
                break;
        }
    }

    }
}

出力例は次のとおりです。

instance15
   [object Sprite]
instance21
   [object Sprite]

オブジェクトはすでにステージ上にあるため、Flash にオブジェクトを「instance#」ではなく「txt1」および「txt2」として認識させる方法がわかりません。.name プロパティを設定しようとしましたが、効果がありませんでした。

パブリッシュ設定で、「ステージインスタンスを自動的に宣言する」にチェックを入れました。

また、複数のスライダー コンポーネントに対して単一の変更イベントを設定することは可能ですか? 以下は決して発火しません:

root.addEventListener(SliderEvent.CHANGE, sliderChanged,false,0,true);

ヒントをありがとう

4

1 に答える 1

0

コンストラクターが呼び出されるまでに、Flash Player が TLFTextFields を初期化していないようです。これを試して:

package  {

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

    public class TestTLF extends MovieClip {

        private function onEnterFrame (ev:Event) : void {
            removeEventListener (Event.ENTER_FRAME, onEnterFrame);
            for (var i:int = 0; i < numChildren; i++) {
                var obj:Object = getChildAt(i);
                trace (obj.name + ":"+describeType(obj));
            }
        }

        public function TestTLF() {
            addEventListener (Event.ENTER_FRAME, onEnterFrame);
        }
    }

}

不可解に作成された追加オブジェクト「__id#」と「instance#」に加えて、両方の TFLTextField が認識されることがわかります。

また、Slider コンポーネントは明らかにその SliderEvent を「バブル」させません。つまり、ルート オブジェクトに到達することはありません。ただし、ハンドラー関数は何度でも割り当てることができるため、各スライダーにリスナーを追加して、すべて同じsliderChanged関数を参照することができます。

于 2010-12-29T13:48:44.517 に答える