- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在用 Java 编写 RTS 游戏,遇到了一些多态性问题。为了描述我的问题,我将列出游戏中的一些对象/类:(我将在括号内说明它们中的每一个应该能够做什么)
在我看来,实现它的理想方式是为每个独特的能力创建一个类,即可移动、可攻击、可耕种、可 build 。这是所有列出的对象都具有的不同能力。它们都是一个游戏对象(层次结构中的最高类,所有对象都有公共(public)数据)。
Movable 包含移动对象的所有代码(计算速度、方向、新位置等)。 Attackable 包含用于跟踪目标、射击、更新射击等的代码。其他能力类别也是如此。
所以在我看来,这将是完美的:
public class Tank extends Movable, Attackable, GameObject {}
public class Tiger extends Movable, Attackable, Farmable, GameObject {}
显然,Java 不允许扩展多个类。而且我不知道如何使用接口(interface)来解决我的多态性和类层次结构问题。
有什么想法吗?目标当然不是重复游戏中多个对象共享的代码。
最佳答案
Movable, Attackable 是对象的多种可能行为,所以最好是接口(interface)。
至于这些行为的实现——为了解决重复代码的问题,你可以为每个行为创建单独的类——我们将它们命名为服务,例如。 移动服务,攻击服务。
然后,您可以将这些服务注入(inject)您正在创建的对象(例如 new Tank(myMoveService) )或将对象传递给这些服务,例如。 MoveService.instance().move(myTank)
您可以通过调用委托(delegate)方法为每个类运行一些自定义代码。
例子
interface Movable { public void onMove(); }
class Tank implements Movable {
public void onMove() {
//tank moved!
}
}
class MoveService {
public void move(Movable m) {
// do what you need to do to move
// invoke custom code by running a delegate method
m.onMove();
}
}
关于java - RTS 游戏中对象的多态性和类层次结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645425/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!