0

我最近开始用 XNA 开发一个 Windows Phone 游戏。我有问题,因为您可能已经猜到了碰撞检测。在查找了有关可以实现的所有类型的教程后,我决定我将使用基本的矩形碰撞检测。我有一个旋转精灵和一个每次在 Update() 方法中计算边界框的方法,所以我知道它的边界框在哪里,然后我只需检查框的所有线与其他精灵的所有线之间的交点盒子。但是由于我的盒子看起来是方形的,而我的旋转精灵的纹理是矩形的,所以我想缩放边界框,使其更接近纹理的大小。这是我计算旋转边界框角的方法:

        double baseAngle = Math.Atan(this.Height / this.Width);
        double len = Math.Sqrt(this.Height * this.Height / 4 + this.Width * this.Width / 4);

        Vector2 tr = new Vector2((float)(Math.Sin(baseAngle + this.Rotation) * len) + this.Position.X, (float)(Math.Cos(baseAngle + this.Rotation) * len) + this.Position.Y);
        Vector2 tl = new Vector2((float)(Math.Sin(Math.PI - baseAngle + this.Rotation) * len) + this.Position.X, (float)(Math.Cos(Math.PI - baseAngle + this.Rotation) * len) + this.Position.Y);
        Vector2 bl = new Vector2((float)(Math.Sin(Math.PI + baseAngle + this.Rotation) * len) + this.Position.X, (float)(Math.Cos(Math.PI + baseAngle + this.Rotation) * len) + this.Position.Y);
        Vector2 br = new Vector2((float)(Math.Sin(2 * Math.PI - baseAngle + this.Rotation) * len) + this.Position.X, (float)(Math.Cos(2 * Math.PI - baseAngle + this.Rotation) * len) + this.Position.Y);`

任何帮助,将不胜感激。谢谢

4

1 回答 1

0

当你缩放时,它只会显得更大,宽度和高度是相同的。所以边界框与原始框相同。尝试将高度和宽度与计算边界框的比例数相乘。

你不能旋转边界框,你必须使用matrix.class但你总是可以使用圆形碰撞。

圆形碰撞

int circlesColliding(int x1, int y1, int radius1, int x2, int y2, int radius2) {
    //compare the distance to combined radii
    int dx = x2 - x1;
    int dy = y2 - y1;
    int radii = radius1 + radius2;
    if ((dx * dx) + (dy * dy) < radii * radii) {
        return true;
    } else {
        return false;
    }
}
于 2013-05-29T06:52:55.213 回答