Java 2D Game Performance with Java Swing Timer



我正在使用Java Swing开发一个射击类型的视频游戏,并且正在使用Java Swing Timer 来控制所有屏幕更新。 主屏幕使用边框布局,我在边框布局中包含的面板上执行图形,并使用AWT图形调用进行绘制。

现在,随着游戏的进行,我想加快屏幕对象(飞船(的移动速度,但我仍然希望它们能够顺利地穿过屏幕。 我想我可以通过将Java Swing Timer的超时值降低到5ms左右来解决问题。 但是,我注意到当我将其设置为小于 15 毫秒时,似乎没有太大区别。 一旦超过该阈值,性能几乎没有明显差异。 -为什么?-

另一种选择是增加每艘船每次更新移动的像素数,但任何超过 3 或 4 像素的东西,事情就会开始看起来很跳跃。

有什么想法吗? 并且真的想将游戏保留在 Swing 中,此时宁愿不要移植到 3rd 方库。

谢谢。

很可能不是软件问题,也不是软件可以修复的。您的屏幕可能每秒只刷新大约 60 次,这意味着帧每秒仅绘制 60 次,或每(大约(16 毫秒绘制一次。由于这是一个硬件障碍,因此无法通过软件使其更新得更快。您可能也可以指望您的用户只有 60Hz 显示器,因此更值得研究其他解决方案。

我想

到的一个解决方案是添加运动模糊,使船只看起来移动得更快,而实际上并非如此。它可以让你在看起来跳跃之前"跳跃"更远的距离,因为模糊会诱使眼睛认为它走得非常快,而不是在屏幕上跳跃。不幸的是,我看到的唯一做运动模糊的事情是第三方库,尽管你可能有更好的运气谷歌搜索。

我建议您至少为 JavaFX 更改 Swing 引擎,这是一种性能更好、工具更多的技术。如今,Swing被认为是一种死技术,以及之前的AWT。学习和开始JavaFX的一个好地方是这个:

http://docs.oracle.com/javase/8/javase-clienttechnologies.htm

开发游戏的理想方法是使用为其准备的库,例如libGDX:

http://libgdx.badlogicgames.com/

但是,如果您的愿望是在 Swing 中创建一个游戏,那么我该评判谁呢?有时看到旧事物是件好事。我自己仍然喜欢Swing,甚至与其他东西相比已经过时了。

我认为您可能正在实现错误的游戏循环。摇摆计时器似乎并不是更新游戏逻辑的好方法。即使不同计算机之间的设置不同,通常也是实用且易于实现的游戏循环才能正常工作,特别是对于角色的正确移动。

你看,游戏循环是游戏的核心,需要直接实现,否则游戏开发错误并有几个限制。通常,在游戏循环中,我们必须考虑所需的FPS。在游戏更新中,我们必须计算上次更新和当前更新之间经过的时间,即许多开发人员所谓的 delta。您会在互联网上找到许多有关它的材料,我推荐:

http://dewitters.koonsolo.com/gameloop.html

http://www.java-gaming.org/index.php?topic=21919.0

https://www.youtube.com/watch?v=9dzhgsVaiSo

过去的链接肯定会对你有所帮助,但如果你想了解更多,我建议你看看这本书:

http://www.brackeen.com/javagamebook/

即使是陈旧的材料(如 Swing(,您也会找到有关如何使用键盘和鼠标 iinput 系统实现良好游戏循环、声音、使用最佳性能 swing 提供的详细信息,以及其他很酷的事情。还有一件事...为了在字符移动方面为您提供更好的结果,我建议您使用具有十进制类型(如浮点数或双精度数(的位置变量(X 和 Y(。

我希望你能做你想做的事。祝你好运!

最新更新