使用JFrame在Java中开发游戏。

我的问题是关于“精灵”,它可以适当地增加其图像,在游戏中的每一步/每帧显示。

我将计时器设置为33毫秒或30分之一秒(30 fps)。

它可以正常运行,因为它每33毫秒在终端“测试”中适当地打印一次,但是我在窗口中看到的却有所不同。当我在窗口中有鼠标时,精灵会适当地交换图像,似乎在移动,但是如果鼠标不在窗口中或未移动,则其刷新率会急剧下降。

我在框架中有一个JPanel,在框架中有一个JLabel。当计时器触发时,将调用JLabel.setIcon(),它将接收Sprite中的下一个图像。

重新粉刷,重新验证无效。在最初的〜2秒内,精灵会以预期的速度移动,此后它会减速到大约2fps,除非我将鼠标光标移动到此点,然后再次以大约30 fps的速度运行约2秒钟。

最佳答案

事实证明,java的专用计时器比我的计时器更适合此操作,因为我的计时器依赖于while true循环。使用javax.swing.Timer进行重写并在每次重绘时利用Toolkit.getDefaultToolkit()。sync()解决了该问题。

关于java - 如何在Java游戏中实现一致的fps,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50363963/

10-14 05:09