Java图形 – 游戏的阶段

这是一个最近困扰我的话题。

在JFrame中创建游戏时,如果要使用paintComponent()方法将图形添加到JPanel中,您将如何为游戏提供不同的阶段? 哪种性能最佳?

我能想到的两种方式是:

  1. 添加和删​​除包含自己的paintComponent()方法和计时器的面板。 一个不同的面板将用于游戏的每个阶段(等级等)。
  2. 将所有内容保存在一个面板或框架中,并具有许多布尔值和if语句。 例如,如果游戏结束时将布尔值更改为true,并且在paintComponent() – 方法中,则使用if语句说明if(gameover)然后为此阶段的游戏绘制图形。

或者还有其他更好的方法吗?

“放弃所有的希望,你们[通过Swing创造游戏]进入!”

要回答你的问题,JPanels只是一个可以画画的表面,比如​​黑板或纸张。 它们与阶段无关,或者除了可以绘制的东西之外的任何其他东西,以及其他子组件的容器。

为了解决游戏特定的问题,我建议你不要浪费时间使用Swing组件来构建游戏界面。 虽然这是可能的 ,但是你会遇到一堆性能问题,这会耗费你的时间。 基于你的问题,你已经在考虑像计时器这样的低级别东西来安排事情,并覆盖paintComponent()方法 – 一个非常常见的错误,以及许多失败项目花费时间的道路,只是为了发现它不是最好的办法。

如果您的问题实际上是您可以看到的森林中的路径,您会注意到以下事项:

  • 它很好地被践踏(因为它似乎是最直接的方法)
  • 指日可待的是几个尖刻的性能死亡坑,以及模糊的,非跨平台兼容的调整
  • 你必须弄清楚如何使用Swing的绘画管理器来做你想要的,在大多数情况下,对于大多数游戏,你需要对渲染管道/过程进行直接,确定的控制
  • 它充斥着试图使用Swing进行游戏的项目主体,出于奇怪(和愚蠢)的原因,例如“我想构建一个仅使用标准Java库的游戏”。 嗯,标准库很好,但它的核心是它旨在解决业务问题,并且非常擅长服务器和网络软件等等。 如果你没有使用至少一些gamedev库,你可能会错过使用正确的工具来完成正确的工作。 Swing绝对不是游戏所使用的,因为它基本上没有游戏开发者的需求,除非你在谈论桌面应用程序/工具来构建和编辑关卡等等。

相反,使用Slick2D (用于2D游戏)或jMonkeyEngine用于3D shtuff。 这些库专为构建游戏而设计,可以帮助您避免重新发明众所周知的轮子,只是为了让您的游戏更上一层楼。 他们还有自己的社区,可以帮助您解决特定于图书馆的问题。

最重要的是,他们已经解决了一些最棘手的跨平台问题,比如处理各种版本的OpenGL,以及其他技术细节,我敢打赌你在一天结束时并不真正关心,你真正想要的是,“嘿,只要给我一个[任意分辨率],图形加速表面来画画,不要让它变得复杂!”