我正在用Java开发一个游戏,我只能把它描述为模拟人生的一个变体。
游戏的主界面由一个关卡组成,将有各种各样的家具可以放置在地图上。我的问题是,虽然我可以想出一些方法来构建一个系统,允许我为每一件家具分配属性,但我想确保在我完成它之前以正确的方式完成它。例如,如果我引用了一个标识符为"sofa“的对象,则可以通过搜索所有可用的对象并找到具有匹配标识符的对象来访问该家具对象的成员。
我的方法是制作一个非常大的.java文件,其中包含每个家具的基本家具类的实例,每个实例都有一个标识符及其分配的所有不同属性,如图像、位置、旋转等,再加上它们提供的每个不同功能的唯一代码(例如,坐着,睡觉)。
为了在文本文件中保存/存储这些对象,我只需将标识符的名称存储在文本文件的字符串数组中,并且在加载时,我可以通过实例化标识符所指向的对象来创建对象。
我是否正确地使用了这些方法中的大多数,或者有更好的方法可用?如果你觉得很难理解我写的东西(我写得也不清楚),那么一个更简单的问题是:
如何在Sims中管理家具项目,包括可用数量和它们可以放置(和存储/保存)的许多不同的变化/旋转?
发布于 2013-06-28 03:34:00
我认为你在这里需要做的是尝试并将尽可能多的公共功能抽象到基类中,然后每个项目都应该根据需要进行扩展。
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
一样
另外,为了保存和加载,您可能希望使您的对象可序列化。
阅读有关Abstraction、Interfaces和Serialization的信息
发布于 2013-06-28 03:03:29
对你来说,Component-Entity-System可能是个不错的选择。这基本上就是你所描述的。有一个庞大的实体集合,每个实体都有一个组件集合,还有一些系统知道如何处理某些组件。
一件家具是一个叫做“椅子”的实体。它有很多组件,其中之一是"Renderable“。并且您的游戏循环将所有可呈现对象传递给调用Renderable.render()
方法的“渲染器”系统。
注意,这并不是非常面向对象,但我发现很难用面向对象的方式设计这样的游戏,因为对象层次结构会爆炸式增长。任何事物都有一些与其他事物的共同点。你最终会得到像"Unit“和"Thing”这样的泛型类,这也不是很面向对象。
https://stackoverflow.com/questions/17351181
复制相似问题