我正在尝试设置一个名为“map”的大型MovieClip中包含的每个MovieClip的深度。 为此,我创建了一个在事件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索引 基于MovieClip的ordererd列表(y属性最终将自行更改,因此 索引顺序也会改变)。问题是,我似乎无法改变'map'MovieClip框架 而'set_depth'函数不断运行,例如我想每次都更改地图当前帧 我按下Shift键,看起来像这样:
public function whenKeyUp(e:KeyboardEvent) {
if(e.keyCode == 16) {
trace('Shift pressed');
map.gotoAndStop(2);
}
}
每次按下Shift都没有发生任何事情,即使跟踪函数被调用也是如此。但是,如果 “set_depth”函数被注释/删除,地图MovieClip将其框架更改为2而没有任何问题。
那么,代码有什么问题吗?我可以以某种方式修复它,以便地图MovieClip可以更改 set_depth函数运行时的框架?或者还有其他解决方案吗?提前致谢。请原谅我的英文
答案 0 :(得分:0)
假设从函数yourEnterFrame(e:Event)调用setDepth(map)..
将此更改为
public function whenKeyUp(e:KeyboardEvent) {
if(e.keyCode == 16) {
map.removeEventListener(Event.ENTER_FRAME, yourEnterFrame);
map.addEventListener(Event.ENTER_FRAME, frameHunt);
trace('Shift pressed');
map.gotoAndStop(2);
}
}
请添加此
public function frameHunt(e: Event){
var map:MovieClip = MovieClip(e.target);
if( map.currentFrame != 2) return;
map.removeEventListener(Event.ENTER_FRAME, frameHunt);
map.addEventListener(Event.ENTER_FRAME, yourEnterFrame);
}