我正在开发一个用Java编写的游戏,我只能将其描述为“模拟人生”的变体。
游戏的主界面包含一个关卡,并且可以放置在地图上的各种各样的家具。我的问题是,虽然我可以想办法构建一个允许我为每个家具项目分配属性的系统,但我想确保在我完成它的漫长道路之前以正确的方式做到这一点。例如,如果我引用了标识符为“sofa”的对象,则可以通过搜索所有可用对象并找到具有匹配标识符的对象来访问家具对象的成员。
我的方法是制作一个非常大的.java文件,其中包含每个家具项目的基本家具类实例,每个家具都有一个标识符,并指定了所有不同的属性,如图像,位置,旋转等,加上他们自己提供的每个不同功能的独特代码(例如,坐着,睡觉)。
为了在文本文件中保存/存储这些对象,我只是将标识符的名称存储在文本文件的字符串数组中,加载时,我可以通过实例化标识符指向的对象来创建对象。
我使用大多数这些方法是正确的,还是更好的方法?如果你发现理解我写的东西很困难(而且我写得很清楚),那么一个更简单的问题就是:
“模拟人生”中的家具项目如何管理可用的数量以及可以放置(并存储/保存)的许多不同变化/旋转?
答案 0 :(得分: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
另外,对于保存和加载,您可能希望使对象可序列化。
答案 1 :(得分:0)
Component-Entity-System对你来说可能是一件好事。这基本上就是你所描述的。有大量实体,每个实体都有一个组件集合,有些系统知道如何处理某些组件。
EG:一件家具是一个名为“椅子”的实体。它有许多组件,其中一个是“可渲染的”。并且您的游戏循环将所有可渲染内容传递到调用Renderable.render()
方法的“渲染器”系统。
请注意,这不是面向对象的,但我发现以OO方式设计这样的游戏很困难,因为对象层次结构会爆炸。一切都与其他一切有共同之处。你最终会得到像“Unit”和“Thing”这样的通用类,这也不是OO。