在设置Movieclip的孩子的深度时,无法更改Movieclip的当前帧

时间:2013-04-02 06:58:49

标签: actionscript-3 flash-cs5

我正在尝试设置一个名为“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函数运行时的框架?或者还有其他解决方案吗?提前致谢。请原谅我的英文

1 个答案:

答案 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);
}