我正在设计一个简单的游戏,你可以避免被我创建的人工智能击中。
我一直在查找碰撞检测,我有一个问题。
我查找的所有信息似乎都涉及到相当多的代码。
我在想为什么不能简单地说:
if(AI.xDirection == x || AI.yDirection == x || AI.xDirection == y || AI.yDirection == y){
System.out.println("Collision");
是用来做这个的吗?
如你所见,我将其设置为打印到控制台,它似乎对我有效。
这有什么缺点吗?
发布于 2012-10-21 05:21:10
您的代码假定客户端关心的是是否存在冲突。可能在游戏和其他情况下,客户端希望在某些情况下以特定的方式处理碰撞(例如,我不久前编写了一个程序,它在随机的障碍物之间来回弹回一个球,根据哪一方最先被击中,它必须在那个方向上反弹)。
关于客户端希望在冲突之后发生什么的列表还在继续,但是如果你想要的只是显示冲突,那么嘿,去吧,伙计。
发布于 2012-10-21 05:17:59
我不确定你的代码实际在做什么,但是如果它可以工作,并且你可以理解,那么我不明白你为什么要改变它!
发布于 2012-10-21 05:22:26
这样做违反了封装。
Prefer定义了一个自定义对象,例如:AIPosition
(可能是不可变的),专门用于封装AI坐标。
包含以下方法的AIPosition
:boolean doesCollideWith(AIPosition anotherPosition)
AI
将包含一个委托方法:
public boolean doesCollideWith(AI anotherAi){
aiPosition.doesCollideWith(anotherAi.getAIPosition());
}
您的调用将是:if(ai1.doesCollideWith(ai2))
因此,如果后面的坐标涉及第三个元素(如z
),则不需要更改客户端代码。
https://stackoverflow.com/questions/12992756
复制相似问题