Actionscript 3 AS3-停止ONENERFRAME功能持续运行
好的,我有一个collisionTest函数,它与我的“oneterFrameHandler”函数相关联 因此,为了简化它的外观:Actionscript 3 AS3-停止ONENERFRAME功能持续运行,actionscript-3,enterframeevent,Actionscript 3,Enterframeevent,好的,我有一个collisionTest函数,它与我的“oneterFrameHandler”函数相关联 因此,为了简化它的外观: onEnterFrameHandler(e:Event):void{ testCollision(); } testCollision():void{ trace("always running"); if(1_MC.hitTestObject(2_MC)){ //do stuff } } 问题是,它总是在运行。为了测试碰撞而持续运行。我有一
onEnterFrameHandler(e:Event):void{
testCollision();
}
testCollision():void{
trace("always running");
if(1_MC.hitTestObject(2_MC)){
//do stuff
}
}
问题是,它总是在运行。为了测试碰撞而持续运行。我有一种感觉,这可能是导致延迟的原因
您知道一种控制函数的好方法吗?该函数需要能够随时检查事件,但在偶数未发生时不运行?很难回答这个问题,因为当您不检查碰撞时,它非常模糊。为了提高性能,不是改变碰撞测试的方式,而是何时进行检查 因此,您只需添加一条if语句,如下所示:
if (doCollisionTest){testCollision();}
但是当
doCollisionTest
为真或假时,这并不能解决问题,而这是一个棘手的部分,无法从您提供的信息中得到回答。如果您不需要检查每一帧,您可以使用计时器,只检查您喜欢的频率,例如,如果您认为它足够好,每秒检查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()
,通常您总是在游戏循环中检查碰撞。您可以提供一个标志来指示是否需要检查某些内容
在一个旁注下,考虑使用,我想你会发现它只关心每一个关于碰撞的场景。
不确定你要问什么(当事件没有发生时不运行)。是否需要检查每一帧的冲突?可以使用Timer类而不是enter frame,然后设置检查频率的间隔。如果这是你的意思,让我知道,我会做一个例子作为回答,这不会抵消我的碰撞测试吗?由于每秒只检查三次,这些间隙不会导致问题吗?我的程序目前以每秒30帧的速度运行(不确定一个游戏最好的速度是什么),所以只检查10%的时间似乎有点松散。是的,只要我实现了计时器,子弹有时会穿过敌人。我很感谢你的帮助,但是对于像碰撞测试这样精确的东西,我不确定计时器是否是最好的…除非你能想出更好的方法来使用它。你应该在移动子弹的同一块代码中进行检查。如果你的子弹不动,就不要做碰撞测试。你没有在你的问题中给出任何明确的背景,所以这似乎是你想要的