Actionscript 3 旋转sprite的EnterFrame listener杀死我的帧速率?

Actionscript 3 旋转sprite的EnterFrame listener杀死我的帧速率?,actionscript-3,listener,frame-rate,Actionscript 3,Listener,Frame Rate,嗯,我不是一个新手,也不是一个专家,但我觉得这很奇怪。我有一个类,它创建了一个图像数组,并通过ENTER_FRAME listener函数(一种动画gif)在其中旋转。 很好。 我添加了另一个ENTER_帧侦听器,它以.5度的增量旋转对象,直到达到23.5度,确实如此,但我的帧速率减慢到爬行状态。 糟糕 有一次,我将一个getTimer()设备放入第一个侦听器中,以测量调用它的速度,我看到在没有旋转侦听器的情况下大约有20毫秒,在旋转侦听器处于活动状态时大约有200-250毫秒。 同样值得注意的

嗯,我不是一个新手,也不是一个专家,但我觉得这很奇怪。我有一个类,它创建了一个图像数组,并通过ENTER_FRAME listener函数(一种动画gif)在其中旋转。
很好。
我添加了另一个ENTER_帧侦听器,它以.5度的增量旋转对象,直到达到23.5度,确实如此,但我的帧速率减慢到爬行状态。
糟糕
有一次,我将一个getTimer()设备放入第一个侦听器中,以测量调用它的速度,我看到在没有旋转侦听器的情况下大约有20毫秒,在旋转侦听器处于活动状态时大约有200-250毫秒。
同样值得注意的是,当旋转侦听器达到23.5度并自行关闭时,frameAdvance侦听器的调用保持不变(非常慢)

我的班级中的职能:

    private function drawThis():void {
        removeEventListener(Event.ENTER_FRAME, wait4images);            
        for (var i:int = 0; i < shapeLoader.ShapeArr.length; i++) {
            addChild(shapeLoader.ShapeArr[i]);
        }

        //stage.addEventListener(Event.ENTER_FRAME, rotateme);
             //like this, it works quickly!

        stage.addEventListener(Event.ENTER_FRAME, rotateme);
             //like this, it is very slow!

        graphics.lineStyle(2,0xff0000)
        graphics.moveTo(0, -this.width / 2);
        graphics.lineTo(0, this.width / 2);
        addEventListener(Event.ENTER_FRAME, frameAdvance,false,0,true);
    }

    private function rotateme(e:Event):void{
        this.rotation += .5;
        if (this.rotation == 23.5) {
            stage.removeEventListener(Event.ENTER_FRAME, rotateme);
        }
    }

    private function frameAdvance(e:Event):void {
        frameNo += 1;   
        addChild(shapeLoader.ShapeArr[frameNo]);
        if (frameNo == 23) {
            frameNo = 0;
        }
    }
private函数drawThis():void{
removeEventListener(Event.ENTER_FRAME,wait4images);
for(变量i:int=0;i

对于这个问题有什么想法/解释/解决方案吗?

如果你只想像“加载”gif一样旋转图像,我建议使用Tween库。它们不需要出现在ENTER_FRAME事件中,并且不是流程密集型的@Phantom先生-Tweening发动机使用发动机罩下的进入框架。然而,它们确实提取出了所有潜在的内存泄漏,这可能是这里的问题所在。@Chowzen-try
this.cacheAsBitmap=true
绘图中使用此功能。旋转可能非常昂贵,但我认为您的frameAdvance方法会使系统负担过重。在添加所有图像后,是否删除
frameAdvance
侦听器?@ww0z0k我会。我特别留下了这一行:*removeEventListener(Event.ENTER_FRAME,wait4images);*在我发布的代码中,我减轻了潜在的恐惧感,这些恐惧感让我的听众犹豫不决。