0

描述:

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

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

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/游戏引擎?

4

1 回答 1

2

最好的选择是使用 OpenGL 并使用相交的旋转多边形。

然而,为了快速破解,我会更改 dosHit() 例程以将精灵视为圆形而不是矩形。这样,它们在旋转时不会超出界限。代价是碰撞检测在角落里会很糟糕。

于 2011-07-11T10:35:42.803 回答