我正在设计一款简单的游戏,你要避免被我创造的AI击中。
我一直在查找碰撞检测,我有一个问题。
我查找的所有信息似乎都涉及使用相当多的代码。
我想知道为什么不能简单:
if(AI.xDirection == x || AI.yDirection == x || AI.xDirection == y || AI.yDirection == y){
System.out.println("Collision");
用于此吗?
如你所见,我已将它设置为打印到控制台,它似乎对我有效。
这有不利之处吗?
答案 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
),则不需要更改客户端代码。