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

时间:2013-02-09 11:38:33

标签: java

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

但可以肯定的是,有更简单的方法可以做到这一点。我想每100毫秒调用一次方法nextFrame()。是否有捷径可寻?我知道ScheduledExecutorTimer但是我看到他们为这个任务创建了新的线程,我需要在for()循环中为这个循环中的每个对象调用这个方法。那么有一些简单的方法可以称之为:

for (Object object : objects) {
 every(100, TimeUnit.MILISECONDS) {
  object.nextFrame();
 }
}

1 个答案:

答案 0 :(得分:1)

有几个想法:

首先:是否可以反转每100毫秒调用nextFrame的要求?如果是这样,它可能会变成“尽可能多地调用nextFrame,&对象将在适当的时间内更新 ,因为它的上一个nextFrame”?你仍然想要经常调用它,但这将消除以精确的100ms间隔调用nextFrame的压力。

有了这个想法,你的主循环将处理你提到的每个动作,如:

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

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