0

我正在尝试设置一个名为“地图”的大电影剪辑中包含的每个电影剪辑的深度。为此,我创建了一个在事件 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 进行排序,并根据 MovieClips 的 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 没有任何问题。

那么,代码有什么问题吗?我可以以某种方式修复它,以便地图 MovieClip 可以在 set_depth 函数运行时更改其帧吗?或者有没有其他解决方案?提前致谢。原谅我的英语

4

1 回答 1

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);
}
于 2013-04-02T08:17:22.100 回答