有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java存储具有不同功能的大量对象

我正在用Java开发一个游戏,我只能把它描述为模拟人生的一个变体

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

我的方法是做一个非常大的测试。java文件,其中包含每个家具项目的基本家具类实例,每个家具都有一个标识符和分配的所有不同属性,如图像、位置、旋转等,以及它们提供的每个不同功能(例如坐、睡)的唯一代码

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

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

在模拟人生中,如何管理家具项目的可用数量以及它们可以放置(和存储/保存)的许多不同变化/旋转


共 (2) 个答案

  1. # 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

    此外,为了保存和加载,您可能希望使对象可序列化

    阅读AbstractionInterfacesSerialization

  2. # 2 楼答案

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

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

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