我正在制作像游戏这样的模拟游戏,现在我正在试图弄清楚我将如何构建我的对象。
现在我正在考虑创建一个名为GameObject的类,psuedo位于
之下public class GameObject {
name:String
width:int
height:int
}
这样我就可以创建像灌木,树木和建筑物这样的物体。但后来我开始思考。如果我想创建多个相同类型的建筑物和树木怎么办?我将不得不继续制作GameObject的实例,并给它一个新的名称和高度和宽度。为了让我复制一个对象,属性必须是相同的值。这看起来有点单调乏味。然后我想,也许这不是正确的方法。所以我在想,我必须像下面那样扩展GameObject
public class Tree extends GameObject{
birdHouse:Boolean
}
public class Building extends GameObject{
packingGarage:Boolean
stories:Number
}
public class House extends GameObject{
garage:Boolean
stories:Number
}
现在,我可以创建多个house或tree的实例,而无需创建指定它确实是房屋或树的属性。这似乎更合乎逻辑,但同时它似乎分配了更多的内存,因为我正在创建更多的类。
我只需要知道处理这类对象的最佳做法。如果有人可以帮我解决这个问题。如果您了解减少游戏或任何应用程序加载的最佳实践的任何资源。我也想使用Interfaces。第二个概念似乎更合理,我正在考虑让父实现一个类似下面的接口
public class GameObject implement IGameObject {
name:String
width:int
height:int
}
现在我可以创建一个具有松散接受的方法的类接受任何继承GameObject的类型。
Selector.loadObject(gObject:IGameObject);
根据它的类型(即树,建筑,房屋),我可以使用case语句来确定它是哪种类型并相应地对其进行评估。
我还创建了一个将通过loadObject方法传递的Tile类。它也将是GameOject类的一个孩子。如果case语句发现它是Tile类型,它将突出显示任何Tile,具体取决于我的鼠标所在的tile。
我的第二个问题是,如果一个类继承了一个实现接口的类,那么该类子类也被认为是一个IGameObject。或者是否必须直接实现该接口。
所有这些听起来像我正朝着正确的方向大声笑,就组织而言。
感谢您的帮助,谢谢你们!
答案 0 :(得分:3)
您可以考虑的一件事是使用对象的组合而不是继承。这种情况与Flyweight的答案一致。而不是让所有GameObjects继承GameObject的属性;相反,让每个游戏对象只有一个引用或指向具有所需属性的对象或接口。例如,您的所有游戏对象可能都具有某种“大小”属性 - 而不是从基类继承此属性,只需将每个游戏对象引用或指向“大小”类,以便可以共享大小对象在类似的对象中。
答案 1 :(得分:2)
您应该查看Flyweight模式
来自维基百科:
Flyweight是一种软件设计 图案。 flyweight是一个对象 通过共享来最小化内存使用 尽可能多的数据与其他人 类似的对象;这是一种使用方式 一个简单的大量对象 重复表示将使用 不可接受的记忆量。
至于你的第二个问题,答案是肯定的。可以说类的所有子类都实现了父类实现的所有接口。
答案 2 :(得分:1)
这似乎更符合逻辑,但在 同时它似乎分配更多 记忆因为我正在创造更多 类。
创建新类不会占用大量内存。它正在创建使用内存的实例 - 但同样,与在图形中加载所使用的内存相比,数量可以忽略不计。不要担心内存。在这个阶段你唯一关心的应该是良好的代码组织。
当他们有不同的行为时,你应该有单独的类。如果它们具有相同的行为但属性不同,则使用相同的类并相应地设置属性。
在这种情况下,您似乎没有明显不同的行为,但如果将其分为Tree,Building和House,则在管理哪些项目可以包含在其他项目等时,您可以更轻松地完成生活。