Java 如何在固定时间间隔内调用方法(无线程)
我必须处理一些对象的动画。目前,我已经使用了4种方法来完成它:Java 如何在固定时间间隔内调用方法(无线程),java,Java,我必须处理一些对象的动画。目前,我已经使用了4种方法来完成它:getAnimationCooldown(),resetAnimationCooldown(),subAnimationCooldown()和nextFrame() 但可以肯定的是,有更简单的方法可以做到这一点。我想每隔100毫秒调用方法nextFrame()。有没有一个简单的方法可以做到这一点?我知道ScheduledExecutor和Timer,但是我看到他们为这个任务创建了新的线程,我需要在for()循环中为这个循环中的每个对象
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)
就足够了吗?不,因为还有处理移动、拍摄和打开的功能:/看起来需要创建第二个线程。。