Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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
Java 如何在固定时间间隔内调用方法(无线程)_Java - Fatal编程技术网

Java 如何在固定时间间隔内调用方法(无线程)

Java 如何在固定时间间隔内调用方法(无线程),java,Java,我必须处理一些对象的动画。目前,我已经使用了4种方法来完成它:getAnimationCooldown(),resetAnimationCooldown(),subAnimationCooldown()和nextFrame() 但可以肯定的是,有更简单的方法可以做到这一点。我想每隔100毫秒调用方法nextFrame()。有没有一个简单的方法可以做到这一点?我知道ScheduledExecutor和Timer,但是我看到他们为这个任务创建了新的线程,我需要在for()循环中为这个循环中的每个对象

我必须处理一些对象的动画。目前,我已经使用了4种方法来完成它:
getAnimationCooldown()
resetAnimationCooldown()
subAnimationCooldown()
nextFrame()

但可以肯定的是,有更简单的方法可以做到这一点。我想每隔100毫秒调用方法
nextFrame()
。有没有一个简单的方法可以做到这一点?我知道
ScheduledExecutor
Timer
,但是我看到他们为这个任务创建了新的线程,我需要在
for()
循环中为这个循环中的每个对象调用这个方法。有没有简单的方法可以这样称呼它:

for (Object object : objects) {
 every(100, TimeUnit.MILISECONDS) {
  object.nextFrame();
 }
}
以下是一些想法:

第一:是否可以将每隔100ms调用nextFrame的要求颠倒过来?如果是这样的话,它可能会变成“尽可能频繁地调用nextFrame,&对象将在其上一个nextFrame之后适当地更新?您仍然希望足够频繁地调用它,但这将消除以精确的100毫秒间隔调用nextFrame的压力

有了这个想法,您的主循环将处理您提到的每个操作,如下所示:

while(!isGameOver()) {
  moving();
  shooting();
  for (Object object : objects) {
    object.nextFrame();
  }
}

第二:切换到一个完全事件驱动的模型,但要注意该模型的“由内而外的逻辑”危险。

创建一个计时器,每100毫秒迭代一次所有对象,怎么样?应该在这个循环中完成,因为它只对实现可动画界面的对象设置动画。当然,我可以做第二个线程,但我认为第二次对所有对象进行交互是浪费能量的。在这个循环中调用
thread.sleep(200)
就足够了吗?不,因为还有处理移动、拍摄和打开的功能:/看起来需要创建第二个线程。。