首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的Java冲突检测

简单的Java冲突检测
EN

Stack Overflow用户
提问于 2012-10-21 05:15:10
回答 3查看 451关注 0票数 1

我正在设计一个简单的游戏,你可以避免被我创建的人工智能击中。

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

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

我在想为什么不能简单地说:

代码语言:javascript
运行
复制
if(AI.xDirection == x || AI.yDirection == x || AI.xDirection == y || AI.yDirection == y){
        System.out.println("Collision");

是用来做这个的吗?

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

这有什么缺点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-21 05:21:10

您的代码假定客户端关心的是是否存在冲突。可能在游戏和其他情况下,客户端希望在某些情况下以特定的方式处理碰撞(例如,我不久前编写了一个程序,它在随机的障碍物之间来回弹回一个球,根据哪一方最先被击中,它必须在那个方向上反弹)。

关于客户端希望在冲突之后发生什么的列表还在继续,但是如果你想要的只是显示冲突,那么嘿,去吧,伙计。

票数 1
EN

Stack Overflow用户

发布于 2012-10-21 05:17:59

我不确定你的代码实际在做什么,但是如果它可以工作,并且你可以理解,那么我不明白你为什么要改变它!

票数 2
EN

Stack Overflow用户

发布于 2012-10-21 05:22:26

这样做违反了封装。

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

包含以下方法的AIPositionboolean doesCollideWith(AIPosition anotherPosition)

AI将包含一个委托方法:

代码语言:javascript
运行
复制
public boolean doesCollideWith(AI anotherAi){
    aiPosition.doesCollideWith(anotherAi.getAIPosition());
} 

您的调用将是:if(ai1.doesCollideWith(ai2))

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12992756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档