Android碰撞检测

时间:2011-07-11 10:29:27

标签: android collision-detection rect

说明

我有一个现在差不多完成的项目,但我注意到碰撞并没有真正起作用。这是一个类似蛇的游戏,可以通过触摸屏进行控制,因此可以实现尖锐的(?,对不起的德语)角度。目前我只是留下一点宽容(忽略前2个精灵)来启用一点转动。主要问题是精灵正在旋转,导致过度的碰撞盒。我没有使用任何游戏引擎或OpenGL。

碰撞代码: offsetX& offsetY是位图宽度或高度/ 2,在蛇的头部调用。蛇(Bird)中的每个环节都是可放置的

public boolean doesHit(Placeable p) {
    int xLen = Math.abs(this.x - p.x);
    int yLen = Math.abs(this.y - p.y);
    if (bmp != null) {
        if (xLen < offsetX + p.offsetX && yLen < offsetY + p.offsetY)
            return true;
    } else {
        if (xLen < Bird.BIG_W[Bird.mUseBird] / 2
                && yLen < Bird.BIG_H[Bird.mUseBird] / 2)
            return true;
    }
    return false;
}

TL; DR /问题:

有没有办法旋转Rects然后比较它们(首选,因为游戏已经完成除此之外)?或者最简单的方法是移植到OpenGL /游戏引擎?

1 个答案:

答案 0 :(得分:2)

最好的选择是使用OpenGL并使用带有交叉点的旋转多边形。

然而,对于快速黑客,我会改变doesHit()例程,将精灵视为圆形而不是矩形。这样,它们在旋转时不会在边界外生长。价格是碰撞检测在角落里会很糟糕。