我是android新手。如何检测两个对象之间的碰撞?是否可以使用精灵,比如j2me?
在j2me:
Sprite s =new Sprite(img,img.getWidth/5,img.getHeight)
s.nextFrame();
s.move(5,0);
Sprite s1 =new Sprite(img1,img1.getWidth/5,img1.getHeight)
s1.nextFrame();
s1.move(-5,0)
if(s1.collidesWith(s,true))
{
/* ... */
}
如何在Android中执行此操作?
答案 0 :(得分:1)
如果您不想自己动手,那么最简单的方法可能是使用Rect类,或者在需要浮动时使用RectF:
http://developer.android.com/reference/android/graphics/Rect.html
http://developer.android.com/reference/android/graphics/RectF.html
简而言之,您将使用包含图像的矩形进行碰撞检测。它可以用其他形状完成,但它更复杂。您可以使用intersect(Rect)
方法检测交叉点。也不要忘记检查包含,这是这种情况:
------------
| |
| ----- |
| | | |
| ----- |
| |
------------
使用contains(Rect)
方法。如果你的精灵移动速度太快以至于交叉方法没有检测到任何东西(在游戏循环迭代中它们没有碰撞,并且在下一次迭代中它们是一个在另一个内部),这是必要的。在这种情况下,您必须检查两个相互碰撞的精灵。对于交叉点,用一个来做就足够了:
static boolean collide(Rect r1, Rect r2){
if(r1.intersect(r2) || r1.contains(r2) || r2.contains(r1)){
return true;
}
return false;
}
网上有关于2D游戏的优秀教程,还有很多可供学习的源代码,包括Android版。总是值得一看这些。