Java图形 - 游戏的阶段

时间:2011-10-15 22:22:14

标签: java performance

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

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

我能想到的两种方式是:

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

1 个答案:

答案 0 :(得分:16)

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

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

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

如果您的问题确实是您可以看到的森林中的路径,您会注意到这些事情:

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

相反,使用类似Slick2D(适用于2D游戏)或jMonkeyEngine之类的3D shtuff。这些库专为设计用于构建游戏,并且可以帮助您免于重新发明众所周知的轮子,只是为了让您的游戏继续进行。他们还有自己的社区,可以帮助您解决特定于图书馆的问题。

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