【问题标题】:Java graphics - Stages of a gameJava 图形 - 游戏的各个阶段
【发布时间】:2011-10-15 22:22:13
【问题描述】:

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

在 JFrame 中创建游戏时,您想使用paintComponent()-方法将图形添加到 JPanel,您将如何为游戏设置不同的阶段?哪个最适合性能?

我能想到的两种方法是:

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

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

【问题讨论】:

    标签: java performance


    【解决方案1】:

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

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

    为了解决特定于游戏的问题,我建议您不要浪费时间使用 Swing 组件来构建游戏界面。虽然 可能,但您会遇到一堆性能问题,这些问题只会占用您的时间。根据您的问题,您已经在考虑诸如 Timers 之类的低级东西来安排事情,并覆盖 paintComponent() 方法 - 这是一个非常常见的错误,并且许多失败的项目花费时间只是为了发现它不是最好的办法。

    如果您的问题实际上是您可以看到的森林中的一条小路,您会注意到以下几点:

    • 它被很好地践踏(因为它似乎是最直接的方法)
    • 指日可待的是几个尖峰的性能死亡坑,以及晦涩的、非跨平台兼容的调整
    • 您必须弄清楚如何使用 Swing 的绘画管理器来做您想做的事,而在大多数情况下,对于大多数游戏来说,您希望直接、确定性地控制您的渲染管道/进程
    • 到处都是尝试将 Swing 用于游戏的项目,出于奇怪(和愚蠢)的原因,例如“我想构建一个只使用标准 Java 库的游戏”。好吧,标准库很好,但它的核心是为解决业务问题而设计的,并且非常擅长服务器和网络软件等。如果您至少没有使用一些 gamedev 库,那么您可能会错过使用正确的工具来完成正确的工作。 Swing 绝对不是为游戏使用而构​​建的,因为它基本上不满足游戏开发者的需求,除非您正在谈论用于构建和编辑关卡之类的桌面应用程序/工具.

    相反,请使用 Slick2D(用于 2D 游戏)或 jMonkeyEngine 用于 3D shtuff 之类的东西。这些库是专门为构建游戏而设计的,并且可以让您不必重新发明众所周知的轮子,只是为了让您的游戏运行起来。他们也有自己的社区,可以帮助您解决图书馆特有的问题。

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

    【讨论】:

    • 哇!非常感谢!这应该对我有很大帮助。我知道这不是最好的路线,但我不确定其他选择。
    • 假设我的一些项目已经死了,在那条路上,所以我知道我从哪里说话。根据我的经验,使用 Swing 做除标准桌面应用程序之外的任何事情(这是它真正构建的目的)都是一种挫折练习——即使没有大量练习,这样做也会令人沮丧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多