AS3 - 从持续运行中停止onEnterFrame功能

时间:2012-08-20 21:06:37

标签: actionscript-3 enterframeevent

好的,我有一个与我的“onEnterFrameHandler”函数绑定的collisionTest函数。

所以要简化它的外观:

onEnterFrameHandler(e:Event):void{
testCollision();
}

testCollision():void{
  trace("always running");
  if(1_MC.hitTestObject(2_MC)){
    //do stuff
  }
}

问题是,它始终在运行。不断运行以测试碰撞。我觉得这可能导致this project的延迟。

您是否知道一种控制功能的好方法,该功能需要能够在任何时间检查事件,而在偶数未发生时不运行?

3 个答案:

答案 0 :(得分:0)

很难回答这个问题,因为当你没有检查碰撞时,这个问题非常模糊。为了提高性能,它不是要改变碰撞测试方法,而是何时进行检查。

所以你可以通过简单地添加if语句来实现这一点:

if (doCollisionTest){testCollision();}

但是当doCollisionTest为真或假时,这并不能解决,这是棘手的部分,无法从您提供的信息中回答。

答案 1 :(得分:0)

如果您不需要检查每一帧,您可以使用定时器只根据您的需要进行检查,例如,如果您认为它足够好每秒检查3次,您可以设置它像这样:

var timer:Timer = new Timer(333); //run 3 times a second
timer.addEventListneer(TimerEvent.TIMER, collisionTest, false, 0, true);
timer.start();

function collisionTest(e:Event = null):void {
   //do you collision stuffs
}

然后,如果您出于某种原因暂时禁用它,请使用timer.stop(),然后再次使用timer.start()

答案 2 :(得分:0)

通常,您总是在游戏循环中检查碰撞。您提供一个标记,指示是否需要检查某些内容。

在旁注中,考虑使用collision detection kit,我认为您会发现它可以解决您可能遇到的有关碰撞的所有情况。