1

我即将编写一个动画,其中JPanel当用户按下(并按住)相应的键时,a 上的角色向左/向右移动。

现在,由于我是并发新手,我想问一下:处理动画的代码(即只要按住键就会移动和重绘角色的方法)应该在工作线程还是事件调度线程上执行?

我阅读了关于并发的教程swing,似乎改变组件的东西(在这种情况下是绘画JPanel)应该在事件处理线程上,但另一方面,只要一个键会冻结所有其他事件举行对吗?

例如,如果我理解正确,用户在按住向左键时将无法暂停游戏。那么哪种方法是正确的,为什么?或者也许有完全不同的方式来制作这样的动画?

先感谢您!

4

1 回答 1

1

所有的绘画都需要在 EDT 线程上完成。永远不要在任何其他线程上。使用 SwingUtilities.invokeLater() .. 进行绘画。您可以进行计算,例如角色在 Worker Thread 上的下一个位置。如果您在 EDT 上创建和使用 Swing 类,您将不会有任何反应迟钝。只需确保您的计算时间不会太长。对于动画,只要您找到角色的下一个位置,只需调用 SwingUtilties.invokeLater 即可更新 UI 上的更改

于 2013-07-04T15:59:50.830 回答