我必须处理一些对象的动画。目前我已经用 4 种方法完成了:getAnimationCooldown()
、resetAnimationCooldown()
、subAnimationCooldown()
和 nextFrame()
。
但可以肯定的是,有更简单的方法可以做到这一点。我想每 100 毫秒调用一次方法 nextFrame()
。是否有捷径可寻?我知道 ScheduledExecutor
和 Timer
但我看到它们为此任务创建新线程,我需要在 for()
循环中为每个任务调用此方法此循环中的对象。那么有没有一些简单的方法来调用它,例如:
for (Object object : objects) {
every(100, TimeUnit.MILISECONDS) {
object.nextFrame();
}
}
最佳答案
一些想法是:
第一:是否可以反转每 100 毫秒调用一次 nextFrame 的要求?如果是这样,它可能会变成“尽可能频繁地调用 nextFrame,并且对象将自上次 nextFrame 以来适本地更新时间”?您仍然希望足够频繁地调用它,但这将消除以精确的 100 毫秒间隔调用 nextFrame 的压力。
有了这个想法,您的主循环将处理您提到的每个操作,如下所示:
while(!isGameOver()) {
moving();
shooting();
for (Object object : objects) {
object.nextFrame();
}
}
第二:切换到完全事件驱动模型,但要注意该模型的“由内而外的逻辑”危险。
关于java - 如何以固定时间间隔调用方法(无线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787699/