我在 Java 方面经验丰富,并且对 Swing(表单类型应用程序)做过一些工作,但我从来没有需要比这更多的功能,所以我不太了解 GUI 的底层情况 -明智的。这是我从我一直在做的一点点阅读中收集到的内容。我确信它已关闭。
在编写太空入侵者类型的游戏时,我想到的两种方法是:
- 为所有增量绘制和分层创建一个大型组件和代码。
- 在包含文本和图像的 JLayeredPane 中创建一堆嵌套的绝对定位 JPanel,然后仅对可能需要重绘的 JPanel 调用 repaint()。然后重写paintComponent()(不确定之前的内容是否被自动清除)。据我了解,这将处理组件的分层和重绘,而无需重绘整个屏幕。
这是正确的吗?如果是,哪种方法更适合该项目?
最佳答案
当涉及到 Java 游戏编程时,需要真正考虑的一件事是切换到主动渲染。
众所周知,Swing 在另一个线程(称为事件调度线程)中负责渲染。这称为被动渲染,因为您并不真正渲染自己的可视组件,而是定义应用程序的外观,然后 Swing 在需要时实际绘制它。
游戏通常在全屏模式下运行,并且通常需要对绘制“何时”、“如何”和“什么”进行更多控制。这称为主动渲染。在这种情况下,您必须禁用 Even Dispatch Thread 并自行进行渲染。
这一切都是有道理的,因为游戏通常在一个大循环中运行。游戏循环的一个示例是:
- 获取输入数据(键盘、操纵杆等)
- 网络通信(如果是客户端-服务器游戏)
- 根据输入数据处理逻辑。 (最终,当用户告诉它时,这将导致游戏退出)。
- 更新游戏的状态机。
- 根据新状态重新绘制场景
- 重新开始循环。
有很多来源,但我可以建议先阅读此内容以澄清这一点:Passive vs Active Rendering
关于java - Java 中的太空入侵者...组件或绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162870/