我正在使用 C# 在 XNA 中构建一个 2D 游戏,并且我正在使用精灵来跟踪玩家的位置并在 spritebatch.Draw() 方法中相应地旋转。我现在正在尝试实现逐像素碰撞检测,并且我相信精灵的旋转会将其扔掉。碰撞检查如下。
private bool collision(Rectangle object1, Color[,] dataA, Rectangle object2, Color[,] dataB)
{
if (object1.Bottom < object2.Top)
return perPixel(object1, dataA, object2, dataB);
if (object1.Top > object2.Bottom)
return perPixel(object1, dataA, object2, dataB);
if (object1.Left > object2.Right)
return perPixel(object1, dataA, object2, dataB);
if (object1.Right < object2.Left)
return perPixel(object1, dataA, object2, dataB);
return true;
}
private bool perPixel(Rectangle object1, Color[,] dataA, Rectangle object2, Color[,] dataB)
{
//Bounds of collision
int top = Math.Max(object1.Top, object2.Top);
int bottom = Math.Min(object1.Bottom, object2.Bottom);
int left = Math.Max(object1.Left, object2.Left);
int right = Math.Min(object1.Right, object2.Right);
//Check every pixel
for (int y = top; y < bottom; y++)
{
for (int x = left; x < right; x++)
{
Color colourA = dataA[x, y];
Color colourB = dataB[x, y];
if (colourA.A != 0 && colourB.A != 0)
{
return true;
}
}
}
return false;
}
如果有帮助的话,只有一组被检查的精灵会被旋转。