简介:有些游戏对象移动,有些则不移动

时间:2013-10-22 10:44:02

标签: java inheritance aggregation

我正在构建一个简短的基本游戏,并且已经给出了一些代码来查看。游戏中的所有角色都是游戏对象,有些是可移动的,有些则不是。可移动的有一个位置和方向。

我获得了一个MoveableObject类(如下所示)。可移动的GameObjects在自己的构造函数中实例化此类。我不能保证这段代码是对的,所以我试图掌握它背后的理论。

public class MoveableObject {
    int speed;
    String direction;

    public MoveableObject(){
        speed = 0;
        direction = "unknown";
    }

    public MoveableObject(int iSpeed, String sDirection){
        speed = iSpeed;
        direction = sDirection;
    }

并且所有可移动字符在构造函数中创建此类的实例。例如,来自吸血鬼类。

public class Vampire
    public Vampire(){
            MoveableObject thisObject = new MoveableObject(30, "South-East");
        }
}

据我所知,这称为聚合。我认为这是用于HAS-A关系,而不是IS-A。由于字符是IS-A可移动对象,我应该不使用继承或接口吗?我也不明白为什么你需要创建一个MoveableObject的实例,如果每个字符都是可移动的,当然,你应该赋予它们可移动的能力(通过继承或接口),然后实例化人物?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这取决于MoveableObject类是否也处理对象的实际移动(即根据speeddirection成员更新其位置)或仅保留{{} 1}}和speed成员,以便游戏的引擎模块将使用它来计算对象的位置。

在后一种情况下,我会将direction类的名称更改为更合适的名称,并坚持使用聚合。否则,继承将更适合可移动对象。这样,移动逻辑将实现一次,子类只能照顾自己的特定需求。

要进一步解释MoveableObject是否只是一个数据容器,您可以创建一个接口:

MoveableObject

每个可移动的类看起来像:

public Interface Moveable {
   public MoveableObject getMovementData();
}

并在您的游戏引擎中保存所有移动对象的数组(可移动类型),并在更新方法中获取移动数据并处理它:

public class Vampire implements Moveable {
  .
  .
  private MoveableObject movementData; //
  .
  .
  public MoveableObject getMovementData() {
      return movementData;
  }
}