Java - 如何在gridLayout中将图像从一个点平滑地动画到另一个点?

时间:2012-05-24 02:17:00

标签: java swing animation

我正在为我的国际象棋比赛制作一个gui,我想让这些棋子(图像)的动作变得生动。我希望它是一个平滑的动画,所以它开始慢,加速,然后减速到终点停止。现在,我有一个带有GridLayout的JFrame用于我的棋盘,以及网格中的碎片图像。可以毫不费力地做到这一点吗?我是否需要研究类似openGL的东西(之前从未使用过它)?

1 个答案:

答案 0 :(得分:3)

你不需要OpenGL,因为基本的Swing动画可以很好地处理这个问题。只需将JLabel控制的棋子从使用GridLayout的容器升级到玻璃板,在玻璃板上制作动画,使其在目标容器上移动,然后将其从玻璃板放下到目标容器(可能你的GridLayout保存JPanels,所以目的地将是一个JPanel)。 Swing Timer应该可以很好地运行你的动画循环。

更确切地说,你的逻辑可能是这样的:

  • 用户点击棋子,这件作品的参考文献存储在变量
  • 用户点击目标位置。
  • 国际象棋逻辑引擎检查以确保这是用户的实际转弯并且这是有效的移动
  • 禁止用户在动画发生时进行任何移动(关闭MouseListener)
  • 从当前的JPanel容器中移除JLabel并将其放置在glasspane上的相同屏幕位置
  • 启动Swing Timer进行动画,从当前容器的位置移动到新位置。
  • 计时器将在将其从A移动到B
  • 的棋子上调用setLocation
  • 计时器完成后,从玻璃板上取下一块并放入新容器
  • 告诉国际象棋引擎好,下一位玩家可以移动。

说完这一切之后,我自己的首选是简单地允许用户将JLabel片段从源拖动到目标,并将其拖动为动画。我有代码,显示如何在这个网站上的某个地方执行此操作。对我来说,这是用户移动棋子的更自然的方式。等一下,我会搜索我的链接。

链接位于:does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel