0

FlashIDEでアクティブなときに.flaからメタデータを読み取るフラッシュパネルを構築しています。このパネルはメタデータも.flaに保存しており、問題ありません。問題なのは、イベントリスナーがonDocumentChangeをリッスンするのを停止する方法がわからないことです。

開いている限りリッスンしたいのですが、新しいドキュメントが選択されるたびにメタデータを読み取ろうとするのはあまり良いことではないため、閉じたときにクリーンアップする必要があります。

パネル内のあらゆる種類のイベントをリッスンして、ユーザーがパネルを閉じるタイミングを検出しようとしましたが、成功しませんでした。

誰かがこれについて何か知っていますか?

4

3 に答える 3

3

私はJSFLのイベントで多くの作業を行いましたが、悲しい真実はシステムに欠陥があるということです。ドキュメントイベントは問題ありませんが、レイヤーイベントとフレームイベントは非常に信頼性が低くなります。間違った順序で実行したり、編集を終了したときにレイヤーイベントが発生しないなど。

パネルからのポーリングは、多くの場合、それを行うための最良の方法であり、そのようなパフォーマンスへの影響はありません。

ただし、ドキュメントイベントは問題ありません。それらを削除する方法に関するドキュメントは正しくありません。何をすべきかについては、DruKeppleの投稿を参照してください。

http://summitprojectsflashblog.wordpress.com/2010/11/08/jsfl-get-fl-removeeventlistener-to-work/

于 2011-10-20T22:30:10.743 に答える
1

うーん、メタデータを.flaに保存できる(またはとにかく何らかの一意のIDを持っている)場合は、イベントリスナーで、それを含むドキュメントがまだ開いているかどうかを確認できますか?

したがって、基本的に.flaのフィンガープリントを作成し、リスナーで作業を行う前に、ファイルが開いているかどうかを確認するために存在を確認します。そうでない場合は、リスナーを削除します。はいの場合は、通常のイベント処理を実行します。

于 2011-03-24T15:08:10.660 に答える
0

Within your listener function include another function which loops through all swf panels in the IDE, checking if the name of your panel exists. If it doesn't then remove your listener and return out of your listener function.

function myListenerFunction () {
    if ( !checkForPanel( myPanelName ) ) {
        fl.removeEventListener( type, eventID );
        return;
    }
}

function checkForPanel( arg_panelName ) {

    var target_panelName = arg_panelName;   
    var target_panelsArr = fl.swfPanels;

    var i;
    var iLen = target_panelsArr.length;
    var _swfPanel;
    for ( i = 0; i < iLen; i++ ) {

        _swfPanel = target_panelsArr[i];

        if ( (_swfPanel.name) == target_panelName ) {
            return true;
        }       
    }

    return false;
}
于 2014-07-04T14:17:31.233 に答える