Actionscript 3 旋转sprite的EnterFrame listener杀死我的帧速率?
嗯,我不是一个新手,也不是一个专家,但我觉得这很奇怪。我有一个类,它创建了一个图像数组,并通过ENTER_FRAME listener函数(一种动画gif)在其中旋转。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_帧侦听器,它以.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);*在我发布的代码中,我减轻了潜在的恐惧感,这些恐惧感让我的听众犹豫不决。