我是相对来说比较新的游戏开发者。我已经研究游戏开发和制作游戏2-3个月了,使用的是Java语言。
一直以来,我都是用Swing进行图形处理(也就是整个游戏显示在JPanel
上,使用Graphics2D
对象)。到目前为止,这个方法还没有出现过问题。
但最近,在我的最新项目中出现了一个问题:某些方法无论何时被调用,时间间隔都不一致(有时每15-16毫秒运行一次,有时开始每3000毫秒运行一次)。
我进行了一些沉闷的调试和研究,并发现这种情况可能是因为我没有正确地处理Swing和线程造成的。
我的整个游戏循环都在非EDT线程的run()
方法里面运行。所以我一直在修改Swing元素,导致问题显而易见。
当我找到这个问题时,我想:
“嘿,我可以简单地使用SwingUtilities.invokeLater()
使游戏循环在EDT中运行!”
但接着我想到,就像“禁止”在EDT外部操作Swing元素一样,也会在EDT内部操纵非Swing对象会有问题(我觉得……这个说法正确吗?)。
如果是的话,那么我不知道如何在使用Swing时安全地开发游戏,以避免涉及Swing和线程的奇怪问题。
我的问题是:
如何使用Swing安全地开发游戏?有哪些好的准则需要严格遵守,以避免涉及Swing和线程的问题?每个使用Swing的游戏开发者都应该了解哪些指令呢?
对于我来说,这非常重要,因为我非常想用Java进行游戏开发,但如果我不能理解这个问题,我永远无法顺利开发游戏。
谢谢您的帮助。