gpt4 book ai didi

java - Java 中的太空入侵者...组件或绘制

转载 作者:行者123 更新时间:2023-12-01 17:30:48 25 4
gpt4 key购买 nike

我在 Java 方面经验丰富,并且对 Swing(表单类型应用程序)做过一些工作,但我从来没有需要比这更多的功能,所以我不太了解 GUI 的底层情况 -明智的。这是我从我一直在做的一点点阅读中收集到的内容。我确信它已关闭。

在编写太空入侵者类型的游戏时,我想到的两种方法是:

  1. 为所有增量绘制和分层创建一个大型组件和代码。
  2. 在包含文本和图像的 JLayeredPane 中创建一堆嵌套的绝对定位 JPanel,然后仅对可能需要重绘的 JPanel 调用 repaint()。然后重写paintComponent()(不确定之前的内容是否被自动清除)。据我了解,这将处理组件的分层和重绘,而无需重绘整个屏幕。

这是正确的吗?如果是,哪种方法更适合该项目?

最佳答案

当涉及到 Java 游戏编程时,需要真正考虑的一件事是切换到主动渲染。

众所周知,Swing 在另一个线程(称为事件调度线程)中负责渲染。这称为被动渲染,因为您并不真正渲染自己的可视组件,而是定义应用程序的外观,然后 Swing 在需要时实际绘制它。

游戏通常在全屏模式下运行,并且通常需要对绘制“何时”、“如何”和“什么”进行更多控制。这称为主动渲染。在这种情况下,您必须禁用 Even Dispatch Thread 并自行进行渲染。

这一切都是有道理的,因为游戏通常在一个大循环中运行。游戏循环的一个示例是:

  1. 获取输入数据(键盘、操纵杆等)
  2. 网络通信(如果是客户端-服务器游戏)
  3. 根据输入数据处理逻辑。 (最终,当用户告诉它时,这将导致游戏退出)。
  4. 更新游戏的状态机。
  5. 根据新状态重新绘制场景
  6. 重新开始循环。

有很多来源,但我可以建议先阅读此内容以澄清这一点:Passive vs Active Rendering

关于java - Java 中的太空入侵者...组件或绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com