1

我正在设计一个简单的游戏,你要避免被我创建的 AI 击中。

我一直在查找碰撞检测,我有一个问题。

我查找的所有信息似乎都涉及使用相当多的代码。

我想知道为什么不能简单:

if(AI.xDirection == x || AI.yDirection == x || AI.xDirection == y || AI.yDirection == y){
        System.out.println("Collision");

用于此?

如您所见,我已将其设置为打印到控制台,并且似乎对我有用。

这有缺点吗?

4

3 回答 3

2

不确定您的代码实际上在做什么,但如果它有效并且您可以理解,那么我不明白您为什么应该更改它!

于 2012-10-20T21:17:59.497 回答
1

您的代码假定所有客户关心的是是否存在冲突。可能有游戏和其他情况,客户端希望在某些情况下以某些方式处理碰撞(例如,我前段时间编写了一个程序,在随机障碍物之间来回弹跳球,并取决于哪一边首先击中,它必须朝那个方向反弹)。

该列表继续说明客户希望在碰撞后发生什么,但如果您想要的只是显示碰撞,那么嘿,去吧,伙计。

于 2012-10-20T21:21:10.440 回答
0

你用这种方式违反了封装。

Prefer 定义了一个自定义对象,例如:(AIPosition 可能是不可变的)专用于封装 AI 坐标。

AIPosition包含方法:boolean doesCollideWith(AIPosition anotherPosition)

AI将包含一个委托方法:

public boolean doesCollideWith(AI anotherAi){
    aiPosition.doesCollideWith(anotherAi.getAIPosition());
} 

你的电话是:if(ai1.doesCollideWith(ai2))

因此,如果以后的坐标涉及第三个元素(如z),则您的客户端代码不需要更改。

于 2012-10-20T21:22:25.983 回答