嘿伙计们,请看看我的代码,看看这里有什么问题。我查看了文档和所有内容,看起来这应该可行。
public Boolean CollisionTest (Rect one, Rect two) {
if (one.intersect(two)) {
collided = true;
} else {
collided = false;
}
return(collided);
}
如果两个矩形碰撞,这不会返回吗?我怀疑这个的原因我在我的主线程中有一些空指针异常(它在我的游戏循环线程的finally语句中停止)调试时错误,当我不使用这个函数时它很好。
非常奇怪,如果有人能发布有用的碰撞检测教程的链接,我也很感激。我想处理我自己的碰撞检测,而不是使用外部库。
谢谢大家!
答案 0 :(得分:12)
根据intersect
功能的Android开发者文档:
如果指定的矩形与此矩形相交,则返回true 并将此矩形设置为该交点,否则返回false并且不要更改此矩形。
我强调的部分意味着如果矩形相交,你的one
参数可能会改变 - 我猜它是如何以某种方式设置为null
,并导致你的稍后在游戏循环中出错。
文档还说明:
要测试交叉点,请使用
intersects()
。
Rect.intersects(Rect a, Rect b)
方法的说明是available here。
如果我们修改您的方法以使用Rect.intersects
,它将如下所示:
public Boolean CollisionTest (Rect one, Rect two) {
return Rect.intersects(one, two);
}
此时你可能完全摆脱CollisionTest
并直接调用Rect.intersects
- 除非在某些时候你想要实现自己的碰撞检测。在这种情况下,您只需要修改这个方法。这取决于你,真的。
答案 1 :(得分:1)
你可以这样写一张支票:
public boolean CollisionTest(Rect one, Rect two) {
return one.left <= two.right && one.right >= two.left &&
one.top <= two.bottom && one.bottom >= two.top;
}
答案 2 :(得分:1)
我看到你没有在函数中定义碰撞。是在全局空间中定义还是作为实例变量。
您也可以缩短代码
public Boolean CollisionTest (Rect one, Rect two) {
if (one.intersect(two)) {
collided = true;
} else {
collided = false;
}
return(collided);
}
作为
return one.intersect(two);
答案 3 :(得分:1)