简单的Java碰撞检测

时间:2012-10-20 21:15:10

标签: java collision-detection

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

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

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

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

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

用于此吗?

如你所见,我已将它设置为打印到控制台,它似乎对我有效。

这有不利之处吗?

3 个答案:

答案 0 :(得分:2)

不确定您的代码实际上在做什么,但如果它能够正常工作且您可以理解,那么我不明白为什么要更改它!

答案 1 :(得分:1)

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

关于碰撞后客户希望发生什么的列表,但是如果你想要的只是显示碰撞,那么嘿,那就去找人吧。

答案 2 :(得分:0)

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

首选定义一个名为实例的自定义对象:AIPosition(可能是不可变的)专用于封装AI坐标。

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

AI将包含委派方法:

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

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

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