2

我正在为我的国际象棋游戏制作一个 gui,我希望这些棋子(图像)的动作具有动画效果。我希望它是一个流畅的动画,所以它开始缓慢,加速,然后减速到终点停止。现在,我的棋盘有一个带有 GridLayout 的 JFrame,以及网格中的棋子图像。是否可以在没有太多麻烦的情况下做到这一点?我是否必须研究类似openGL的东西(以前从未使用过)?

4

1 回答 1

3

您不需要 OpenGL,因为基本的 Swing 动画可以很好地处理这个问题。只需将持有 JLabel 的棋子从使用 GridLayout 的容器提升到 glasspane,在 glasspane 上对其进行动画处理,使其移动到目标容器上方,然后将其从 glasspane 放到目标容器上(可能您的 GridLayout 包含 JPanel,所以目的地将是一个JPanel)。Swing Timer 应该可以很好地运行动画循环。

所以更准确地说,你的逻辑可能是这样的:

  • 用户点击棋子,该棋子的引用存储在变量中
  • 用户点击目标位置。
  • 国际象棋逻辑引擎检查以确保这是用户的实际回合并且这是有效的移动
  • 禁用用户在动画发生时进行任何移动的能力(关闭 MouseListener)
  • 从当前的 JPanel 容器中删除 JLabel 片段,并将其放置在玻璃窗格上的相同屏幕位置
  • 启动 Swing Timer 做动画,从当前容器的位置移动到新的位置。
  • 计时器将调用 setLocation 将其从 A 移动到 B
  • 计时器完成后,从玻璃板上取出一块并放入新容器中
  • 告诉国际象棋引擎OK让下一个玩家移动。

说了这么多,我自己的偏好是简单地允许用户将 JLabel 从源拖动到目的地,并让他的拖动成为动画。我有代码显示如何在这个站点的某个地方执行此操作。对我来说,这是用户移动棋子的一种更自然的方式。稍等,我去找我的链接。

链接在这里:does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel

于 2012-05-24T02:21:09.093 回答