如何在android中使用精灵(游戏)

时间:2011-07-13 08:41:58

标签: android

我是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中执行此操作?

1 个答案:

答案 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版。总是值得一看这些。