0

「マップ」と呼ばれる 1 つの大きなムービークリップに含まれるすべてのムービークリップの深さを設定しようとしています。これを行うために、イベント ENTER_FRAME で実行される関数を作成しました。

public function set_depth(map:MovieClip) {
    var arr:Array = [];
    for(var i=1;i<=map.numChildren;i++) {
        arr.push({ "name" : map.getChildAt(i-1).name, "y" : map.getChildAt(i-1).y});
    }
    arr.sortOn("y", Array.NUMERIC);

    for(var h=0;h<arr.length;h++) {
        map.setChildIndex(map.getChildByName(arr[h].name), h);
    }
}

関数が基本的に行うことは、y プロパティに基づいて MovieClip を並べ替え、MovieClip の ordererd リストに基づいて MovieClip インデックスを設定することです (y プロパティは最終的には独自に変更されるため、インデックスの順序も変更されます)。問題は、「set_depth」関数が継続的に実行されている間、「マップ」ムービークリップ フレームを変更できないように見えることです。たとえば、次のように Shift キーを押すたびにマップの現在のフレームを変更したかったのです。

public function whenKeyUp(e:KeyboardEvent) {
    if(e.keyCode == 16) {
        trace('Shift pressed');
        map.gotoAndStop(2);
    }
}

トレース関数が呼び出されても、Shift キーを押すたびに何も起こりません。ただし、「set_depth」関数がコメント化/削除された場合、マップ MovieClip は問題なくフレームを 2 に変更しました。

それで、コードに何か問題がありますか?set_depth 関数の実行中にマップ MovieClip がフレームを変更できるように修正できますか? または、他の解決策はありますか?前もって感謝します。私の英語を許してください

4

1 に答える 1