0

メイン フレックス アプリケーションによってロードされる小さな swf as3 フラッシュ アプリケーションがあります。

メインの Flex アプリケーションには SWFLoader が含まれており、SWFLoader.content にイベント リスナーを追加して、準備したカスタム イベントをフェッチしました。

アプリケーションでいつでも関数dispatchEventを使用してイベントを作成し、イベントのバブル パラメータが true であることを確認します。この場合、イベントはイベント リスナーに到達するまでステージ内で泡立ち、イベントを適切に処理できます。

静的クラスがあり、そこからイベントをディスパッチしたい場合に問題が発生します。これは静的クラスであり、ステージに表示される表示オブジェクトではないため、バブルする場所がなく、メインのフレックス アプリケーションでもカスタムを取得できません。

次のコードで eventDispatcher を使用してみました:

            new EventDispatcher().dispatchEvent(new CustomEvent(CustomEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal)));

カスタム イベントのコンストラクターは、パラメーターを 2 番目のパラメーターとして取得します。

そのため、イベント ディスパッチャーを使用している場合、イベントにはまだバブルする場所がないようです。そのため、メイン アプリケーションでもイベントを受信しません。

どうすれば問題を解決できますか? ステージに表示されないオブジェクトに対してイベントを適切にディスパッチできる必要があります。

main イベントのディスパッチに使用するために、この関数のステージに表示されるオブジェクトを提供する必要があります。この問題を解決するためのより良い解決策があることを願っています。

どんな情報でも大歓迎です。

これは私のカスタムイベントクラスです:

public class CustomEvent extends Event
{
    public var command:String;
    public var params:Object;
    public static const CONTROL_TYPE:String = "eMyControl";


    private static var EVENT_setAttribute:String = "set_attribute";

    private static var gameAttributes:Object = new Object();

    public static function setAttribute(attrName:String,attrVal:String):void {
        gameAttributes[attrName]=attrVal;

        new EventDispatcher().(new XpoEvent(XpoEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal}));
    }

    public function CustomEvent(eventName:String, params:Object = null, bubbles:Boolean = true, cancelable:Boolean = false)
    {
        var _loc_6:String = null;
        var _loc_5:String = "";
        if (params != null)
        {
            _loc_5 = "params: ";
            for (_loc_6 in params)
            {

                _loc_5 = _loc_5 + (_loc_6 + "=" + params[_loc_6] + " ");
            }
        }
        trace("CustomEvent issued - " + eventName + " " + _loc_5);
        super(CONTROL_TYPE, bubbles, cancelable);
        this.command = eventName;
        if (params != null)
        {
            this.params = params;
        }
        return;
    }

}

ここでわかるように、attrName と Val を配列に渡してカスタム イベントをディスパッチする setAttribute という静的関数があります。デフォルトでは、カスタム クラス イベントでバブルが有効になっています。ステージに表示されるオブジェクトを使用してイベントをディスパッチしなかったため、メインのフレックスアプリケーションからイベントを適切にキャッチすることを許可していないようです。

次のコードは機能します。

  <object In Stage>.dispatchEvent(new CustomEvent("testme"));

ありがとう

4

1 に答える 1

1

EventDispatcher インスタンスを作成してその何かをディスパッチすると、誰もイベントをサブスクライブできないため、誰もイベントを取得しません。

表示リストにあるものからイベントをディスパッチする必要があります。しかし、あなたの静的クラスは表示リストについて何も知らず、それにアクセスすることもできません。初期化中に表示リスト内のオブジェクトをそれに提供する必要があります。ロードされた SWF でこの目的のために、someDisplayObject がステージ上にある someDisplayObject.root を渡すことができます。someDisplayObject.stage ではありません。コンテナ Stage を指し、さらにアクセスできない可能性があるためです。

于 2012-01-30T00:41:03.733 に答える