「マップ」と呼ばれる 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 がフレームを変更できるように修正できますか? または、他の解決策はありますか?前もって感謝します。私の英語を許してください