0

好的,我有一个与我的“onEnterFrameHandler”函数相关联的碰撞测试函数。

所以为了简化它的外观:

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

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

问题是,它总是在运行。不断运行以测试碰撞。我有一种感觉,这可能是导致该项目滞后的原因。

您是否知道控制需要能够随时检查事件但在事件未发生时不运行的功能的好方法?

4

3 回答 3

0

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

所以你可以通过简单地添加一个 if 语句来做到这一点,如下所示:

if (doCollisionTest){testCollision();}

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

于 2012-08-20T21:27:17.660 回答
0

如果你不需要检查每一帧,你可以使用 Timer 只检查你喜欢的频率,例如,如果你认为每秒检查 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()再次

于 2012-08-20T21:32:07.177 回答
0

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

附带说明一下,考虑使用碰撞检测工具包,我想你会发现它可以处理几乎所有关于碰撞的情况。

于 2012-08-22T15:53:34.987 回答