1

我正在用 Java 开发一款游戏,我只能将其描述为 The Sims 的变体。

游戏的主界面由一个关卡组成,并且会有各种各样的家具可以放置在地图上。我的问题是,虽然我可以想办法构建一个允许我为每件家具分配属性的系统,但我想确保在完成它之前以正确的方式进行操作。例如,如果我引用了一个标识符为“sofa”的对象,则可以通过搜索所有可用对象并找到具有匹配标识符的对象来访问家具对象的成员。

我的方法是制作一个非常大的 .java 文件,其中包含来自每件家具的基础家具类的实例,每件都有一个标识符和分配的所有不同属性,例如图像、位置、旋转等,加上它们自己的他们提供的每个不同功能的唯一代码(例如,坐着,睡觉)。

为了将这些对象保存/存储在文本文件中,我只需将标识符的名称存储在文本文件的字符串数组中,加载时,我可以通过实例化标识符指向的对象来创建对象。

我使用这些方法中的大多数是正确的,还是有更好的方法可用?如果你发现很难理解我写的东西(而且我很难写清楚),那么一个更简单的问题是:

《模拟人生》中的家具物品是如何管理的,相对于可用的数量以及它们可以放置(和存储/保存)的许多不同的变化/旋转?

4

2 回答 2

1

我认为您需要在这里做的是尝试将尽可能多的通用功能抽象到基类中,然后每个项目都应根据需要进行扩展。

Eg
A Sofa... Seat extends Furniture extends Object
A Office chair would be the same
A DiningTable would be different tho... Table extends Furniture extends Object

您还需要各种接口,以便Sofa implements Sittable考虑不同对象可能共有的功能,就像它们可能都是一样的Placeable

同样对于保存和加载,您可能希望使您的对象可序列化。

阅读抽象接口序列化

于 2013-06-27T19:33:59.517 回答
0

组件-实体-系统对您来说可能是一件好事。基本上就是你所描述的。有大量的实体,每个实体都有一个组件的集合,并且有些系统知道如何处理某些组件。

EG:一件家具是一个名为“椅子”的实体。它有许多组件,其中之一是“可渲染”。并且您的游戏循环将所有可渲染对象传递到调用该Renderable.render()方法的“渲染器”系统中。

请注意,这不是非常面向对象的,但我发现很难以 OO 方式设计这样的游戏,因为对象层次结构会爆炸。一切都与其他一切有一些共同点。你最终会得到像“Unit”和“Thing”这样的通用类,它们也不是很面向对象。

于 2013-06-27T19:03:29.173 回答