我正在根据简介构建一个基本游戏,并获得了一些代码供我查看。游戏中的所有角色都是游戏对象,有些是可移动的,有些则不是。可移动的有位置和方向。
我得到了一个 MoveableObject 类(如下)。 Moveable 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。既然一个角色是一个可移动的对象,我不应该使用继承或接口(interface)吗?我也不明白为什么你需要创建一个 MoveableObject 的实例,如果每个角色要么是可移动的,要么是不可移动的,当然,你应该给他们移动或不移动的能力(通过继承或接口(interface))然后实例化角色?
提前致谢。
最佳答案
这取决于 MoveableObject
类是否也负责对象的实际移动(即根据 speed
和 direction
更新其位置) > 成员) 或者只持有 speed
和 direction
成员,以便游戏的引擎模块将使用它来计算对象的位置。
在后一种情况下,我会将 MoveableObject
类的名称更改为更合适的名称并坚持使用聚合。否则,继承将更适合可移动的对象。这样移动逻辑将被实现一次,子类可以只处理它们自己的特定需求。
要进一步解释 MoveableObject
是否只是一个数据容器,您可以创建一个接口(interface):
public Interface Moveable {
public MoveableObject getMovementData();
}
每个可移动类看起来像:
public class Vampire implements Moveable {
.
.
private MoveableObject movementData; //
.
.
public MoveableObject getMovementData() {
return movementData;
}
}
并且在您的游戏引擎中包含所有移动对象的数组(类型为 moveable),并在更新方法中获取移动数据并对其进行处理:
public Class GameEngine {
.
.
private ArrayList<Moveable> movableObjects = .....
.
.
public void gameUpdate() {
for (Moveable moveableObj : movableObjects) {
MoveableObject movementData = moveableObj.getMovementData();
// Process and update as required using the given data
}
}
关于java - Brief : Some game objects move, 有些没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515628/