Java Swing动画鬼问题

时间:2014-03-14 20:17:42

标签: java swing bluej

只是预警:我是java的新手 - 我通常使用UnrealScript和C#,但是我已经分支出来了,所以我可能做错了一两件事,或者不正常java对流(这将与其他两种语言的定罪更加一致)

随意指出它们,我会相应地塑造自己


我正在使用BlueJ在java中制作一个JRPGish风格的游戏。我并没有高度瞄准,而是更像是一个概念验证,而不是一个完整的游戏。

到目前为止一切正常。我使用精灵表工作了精灵动画,玩家可以根据方向将精灵变为正确的动画。

然而,当玩家停止移动时我会遇到问题 - 有时会出现前一帧的残像 - 公平地说,这可能会一直发生,除非你看不到玩家是否继续前进步行动画的第一帧和最后一帧,因为它们占据相同的像素空间,因此被隐藏(如果这是有道理的)

以下是实际问题的图片:

 Player after moving right

这是在玩家移动之后,然后停止,留下" moveRight"的最后一帧。精灵背后。


我创建了一个项目的小版本,当你按一个键时只播放角色动画,并在你发布时停止,其中出现问题

Skeleton class

Character class

GameManager class

KeyManager class

要开始游戏,请在GameManager中运行Main方法

您需要使用" James.png"的文件名保存此图片。并将其放在java项目的同一文件夹中以使其工作

enter image description here

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:3)

paintComponent()Graphics传递给drawCharactor()。除非您复制了drawCharactor() Graphics,否则Graphics不应该处置该repaint()个对象。

另外,请勿从drawCharactor()致电repaint()repaint()计划另一个绘制周期。您已经从计时器中呼叫java.util.Timer

请勿使用javax.swing.Timer使用{{1}}进行Swing绘画。见How to Use Swing Timers

有关详情和示例Performing Custom PaintingPainting in AWT and Swing

考虑发布minimal example