gpt4 book ai didi

Java 游戏开发 : Trying to Separate World and Renderer

转载 作者:行者123 更新时间:2023-12-04 21:27:49 32 4
gpt4 key购买 nike

我正在用 Java 开发一个小游戏,但在决定如何从我正在使用的框架中抽象出我的游戏世界时遇到了问题。

我现在有一个名为 World 的类,它跟踪世界中所有不同的对象并根据游戏规则更新它们。然后我有了三个基本对象类 PersonObstacleItem。每个对象都有不同的“类型”,由成员变量表示。所有对象类都是从 GameObject 类扩展而来的。

正如我现在所拥有的那样,World 和对象类与渲染游戏等的框架是分开的。类 Game 都告诉世界更新和渲染世界和世界中的物体。

问题是我用 drawPersons()drawObstacles()drawItems() 这三种方法渲染对象因为我已经编写了代码,所以我不会再添加任何对象类。真正的问题是渲染每个对象类的不同“类型”。正如我现在所拥有的那样,绘制方法通过检查变量 object.type 来绘制项目,然后有一个 switch 语句选择要绘制的适当位图。

我想对此进行简化,这样我就不必在每次向 Item 类添加新“类型”时都添加到 switch 语句中。我能想到的唯一方法是让对象存储它们在构造时应呈现的位图并设置其 item.type 变量。这样我就可以从 drawItems() 方法中删除 switch 语句。此外,我还可以为每个对象类提供一个 draw() 方法等等等等,但我不想这样做的原因是因为它破坏了我与渲染器/框架和想象的游戏世界的分离。

我不确定该怎么做,一方面我知道像我现在这样使用 switch 语句是个坏主意但另一方面我知道拥有我的 World 是更好的设计和独立于框架的对象类,所以如果我愿意,我可以将它放入一个新的框架或任何其他框架中。

有没有办法让我同时拥有两者?

最佳答案

您可以做的是使用组合,即您的实体包含多个具有不同用途的组件。例如,可能有渲染组件、物理组件、AI 组件等。

世界通常会管理实体,然后子系统会查询实体以获取正确的组件。因此,如果渲染器想要渲染一个实体,它会查询它的渲染组件,可能还有一个位置组件,并使用这些提供的数据来渲染实体。

在那种情况下,渲染组件可能包含纹理/位图、形状、 Material 等数据。

有关更多信息,您可能需要查看 entity systems .

关于Java 游戏开发 : Trying to Separate World and Renderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8877046/

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