2009-12-30 32 views
3

我正在制作像游戏一样的模拟游戏,现在我正在试图弄清楚我将如何构建我的对象。如何正确地创建游戏对象

现在我想创建一个名为游戏物体类的伪低于

public class GameObject { 
     name:String 
     width:int 
     height:int 
} 

这样我就可以创建灌木,树木和建筑物的对象。但后来我开始思考。如果我想创建多个相同类型的建筑物和树木,该怎么办?我将不得不继续制作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 
} 

现在这样,我就可以创建房子,还是树的多个实例,而不产生指定它确实是一个房子或树的性质。这看起来更合乎逻辑,但同时它似乎分配更多的内存,因为我正在创建更多的类。

我只需要知道处理像这样的对象的最佳实践。如果有人能帮我解决这个问题。同样,如果你知道任何资源来减少游戏或任何应用程序的负载的最佳做法。我也想使用接口。第二个概念似乎更合理,我在想,我父执行类似下面

public class GameObject implement IGameObject { 
      name:String 
      width:int 
      height:int 
    } 

现在这样,我可以创建具有松散接受的方法的类可以接受任何类型的游戏对象继承一个接口。

Selector.loadObject(gObject:IGameObject); 

取决于它是什么类型(即树,建筑物,房子),我可以使用一个case语句来找出哪些类型,它和相应的评估。

我也创建了一个Tile Class,它将通过loadObject方法。它也将是GameOject类的一个孩子。如果case语句发现它是Tile类型,它会根据鼠标结束的情况高亮显示任何Tile。

我的第二个问题是,如果一个类继承了一个实现接口的类,那么该类的子类也被认为是一个IGameObject。还是必须直接实现该接口?

所有这些听起来像是我正朝着正确的方向前进,就组织而言。

感谢您的帮助,谢谢你们!

回答

1

这似乎更符合逻辑,但在 同时似乎是因为我创造了更多 类是分配更多的内存 。

创建新类不会占用大量内存。它创建一个使用内存情况 - 但是,相比于图形等所使用的负载不要担心内存的内存量可以忽略不计。您现阶段唯一关心的问题应该是良好的代码组织。

当他们有不同的行为时,你应该有单独的类。如果它们具有相同的行为但属性不同,则使用相同的类并相应地设置属性。

在这种情况下,不会出现有显著不同的行为,但如果它分离成树,大厦和大厦让生活更容易为你管理时,哪些项目可以包含在别人等,做到这一点。

2

你应该看看Flyweight模式

维基百科:

飞锤是一个软件设计 模式。轻量级是 通过共享尽可能减少内存使用 尽可能多的数据与其他 类似的对象;当简单的 重复表示将使用不可接受的内存量时,它是一种大量使用 对象的方法。

至于你的第二个问题,答案是肯定的。一个类的所有子类可以说是实现了父类实现的所有接口。

3

你可以考虑的一件事是使用对象的组合来继承继承。这种伴随着Flyweight的答案。而不是让所有的GameObjects继承GameObject的属性;相反,每个游戏对象都只有一个引用或指向具有所需属性的对象或接口的指针。例如,所有的游戏对象都可能具有某种“大小”属性 - 而不是从基类继承,只是让每个游戏对象引用或指向“大小”类,以便可以共享大小对象在类似的对象之中