java - 我应该为此动画使用 SwingWorker、线程或递归更新吗?

标签 java multithreading swing animation swingworker

正如我在之前的问题中所说,我对 Java 还是个新手。 我正在用 Java 开发一个基于图 block 的游戏。运动在网格上。我正处于实现角色移动的阶段。

我的计划是使用我在 this question 中粘贴的代码.但是,这没有用,有人告诉我应该使用 SwingWorker。

作为一个问题解决者,我这一天一直在思考这个问题,我有了一个想法。 我可以通过做一些不同的事情来达到同样的效果。

我提到我有一个计时器,每 20 毫秒关闭一次,调用重绘。

我的想法是,我可以在重绘事件之前为计时器调用一个方法,这会将所有人移动 1 个单位,使其更靠近他们的目的地(下一个方 block /方 block )。 这样的事情行得通吗?在游戏后期,可能会有 100 人左右。 20 毫秒是否足以循环遍历所有人员并将他们移动一个单位靠近目的地? 20ms 是不是太短了?我是不是完全没有意义?

欢迎您提出意见/答案/想法:)

最佳答案

OK,先回答20毫秒的问题。您可以在 20 毫秒内完成相当多的游戏逻辑。但我会说更新显示太频繁了。您还应该记住,操作系统通常以 10-20 毫秒的时间片为单位分配 CPU——换句话说,任何时刻的另一个进程都可能很容易地使您的进程延迟大约该时间量。例如,看看我关于 behaviour of Thread.sleep() 的文章-- 从图中可以看出,由于系统处于中等繁忙状态,操作系统无法满足我们要求的 hibernate 时间。如果您需要 100 毫秒的帧之间的平均 sleep ,那么这里有 20 毫秒左右的抖动就不会太糟糕。但是当你要求 20 毫秒时,20 毫秒的抖动可能会更明显......

所以我可能会以每秒 10 帧(100 毫秒暂停)开始,然后看看效果如何。

就代码而言,如果您的游戏逻辑在每个 tick 上花费的时间或多或少相同,那么我会在每个 tick 上从 logic-repaint-sleep 开始。请记住,您需要同步正在绘制的内容,因此在您的游戏逻辑线程中,理想情况下您需要避免持有锁太久。

关于java - 我应该为此动画使用 SwingWorker、线程或递归更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782674/

相关文章:

Java spring 框架 - 如何设置内容类型?

Java servlet : request. getParameter() 从 POST 请求中的查询字符串返回一个参数

java - 为什么要捕获 InterruptedException 来调用 Thread.currentThread.interrupt()?

c++ pthread : how to set io_service. run() 作为 pthread_create 中的参数?

java - 如何在 JFrame 退出时运行终止命令?

java - 打包 JMeter Gui

java - 添加新行时 JTable 不更新值

java - TreeMap put() 静默删除其他条目?

java - 使用子选择插入 - 原子操作?

java - 不使用 Java EE 应用程序服务器创建连接池