java - 如何以固定时间间隔调用方法(无线程)

标签 java

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

但可以肯定的是,有更简单的方法可以做到这一点。我想每 100 毫秒调用一次方法 nextFrame() 。是否有捷径可寻?我知道 ScheduledExecutorTimer 但我看到它们为此任务创建新线程,我需要在 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/

相关文章:

java - 如何使用 hibernate xml 创建一个实体的多个版本?

java - 如何在linux中通过java执行shell脚本并保存在文本文件命令中

java - 将 webelement 转换为字符串 Selenium

java - 如何重定向库的 Sys.err?

java - 在 Jenkins 中构建 Maven 期间不支持的类版本

java - 在 DialogFragment 中使用 FragmentManager 和 FragmentTransaction

java - Eclipse 控制台错误提示 JAVA_HOME 丢失

java - 尝试检查输入是否为整数时出现 java.lang.NullPointerException

java - 在 Java 中,如何将 String 格式变量占位符传递给另一个 String 格式化程序?

java - 如何运行一个在执行 main 方法后继续工作的测试类