0

次のコードを使用してSimpleButton、ファイル内のすべてのクリックイベントの関数を登録していswfます。名前SimpleButtonが「b」で始まるsは登録されている必要があります。ただし、すべてのボタンで機能するわけではありません。別のフレームまたは別のフレームの一部のボタンが表示されMovieClipません。このメソッドを最初のレイヤーの最初のフレーム内で呼び出します。

findChilds(this);

function findChilds(obj:*):void
{
    if (obj == null)
    {
        return;
    }
    //trace(obj.name);

    if (obj.name.substr(0,1) == "b")
    {
        obj.addEventListener(MouseEvent.CLICK, onMediaClicked);
        trace(obj.name, " registered for click.");
    }
    try 
    {
        // some type of objects hasn't numChildren property, so i 
        // used try/catch statement, i know this way has bad performance. I fix it later
        for (var i:int = 0; i < obj.numChildren; i++)
        {
            findChilds(obj.getChildAt(i));
        }
    }
    catch (e:Error)
    {
    }
}

助けてください!:(

4

1 に答える 1

1

findChild(this)最初のフレームで呼び出すと、後続のフレームのオブジェクトのみがまだロードされていない(したがってアクセスできない)ため、すべてのフレームで呼び出す必要があります。同じイベントリスナーを2回追加しないようにするために使用hasEventListenerすることをお勧めします(または、呼び出したフレームを追跡するために配列を使用しますfindChild(this))。

いずれにせよ、あなたの方法はあまり良い方法ではなく、維持するのは悪夢です。イベントリスナーを「手動で」追加するようにしてください。おそらくそれほど多くの作業は必要なく、長期的には保守が容易になります。

于 2011-09-19T11:56:25.990 に答える