Java图形 - 游戏的阶段

Tom*_*son 5 java performance

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

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

我能想到的两种方式是:

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

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

jef*_*unt 16

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

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

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

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

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

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

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