Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3-停止ONENERFRAME功能持续运行_Actionscript 3_Enterframeevent - Fatal编程技术网

Actionscript 3 AS3-停止ONENERFRAME功能持续运行

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 } } 问题是,它总是在运行。为了测试碰撞而持续运行。我有一

好的,我有一个collisionTest函数,它与我的“oneterFrameHandler”函数相关联

因此,为了简化它的外观:

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%的时间似乎有点松散。是的,只要我实现了计时器,子弹有时会穿过敌人。我很感谢你的帮助,但是对于像碰撞测试这样精确的东西,我不确定计时器是否是最好的…除非你能想出更好的方法来使用它。你应该在移动子弹的同一块代码中进行检查。如果你的子弹不动,就不要做碰撞测试。你没有在你的问题中给出任何明确的背景,所以这似乎是你想要的