【问题标题】:Correct concurrency approach to swing animation?摆动动画的正确并发方法?
【发布时间】:2013-07-04 15:50:31
【问题描述】:

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

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

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

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

提前谢谢你!

【问题讨论】:

  • 如果你要隐式绘制,一个简单的线程方法会有所帮助,因为底层线程和你的线程之间没有任何冲突,比如this

标签: java multithreading swing animation concurrency


【解决方案1】:

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

【讨论】:

  • 嗯,谢谢你把它弄清楚。还有一件事要确定:“我的计算”是指计算角色在下一帧中的位置的代码,对吗?
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2020-01-15
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多