我必须处理一些物体的动画。目前我已经用4种方法完成了它:getAnimationCooldown()
,resetAnimationCooldown()
,subAnimationCooldown()
和nextFrame()
。
但可以肯定的是,有更简单的方法可以做到这一点。我想每100毫秒调用一次方法nextFrame()
。是否有捷径可寻?我知道ScheduledExecutor
和Timer
但是我看到他们为这个任务创建了新的线程,我需要在for()
循环中为这个循环中的每个对象调用这个方法。那么有一些简单的方法可以称之为:
for (Object object : objects) {
every(100, TimeUnit.MILISECONDS) {
object.nextFrame();
}
}
答案 0 :(得分:1)
有几个想法:
首先:是否可以反转每100毫秒调用nextFrame的要求?如果是这样,它可能会变成“尽可能多地调用nextFrame,&对象将在适当的时间内更新 ,因为它的上一个nextFrame”?你仍然想要经常调用它,但这将消除以精确的100ms间隔调用nextFrame的压力。
有了这个想法,你的主循环将处理你提到的每个动作,如:
while(!isGameOver()) {
moving();
shooting();
for (Object object : objects) {
object.nextFrame();
}
}
第二:切换到完全事件驱动的模型,但要注意该模型的“由内而外的逻辑”危险。