这就是我检测碰撞的方法。
public static bool IntersectPixels(Rectangle rectangleA, Color[] dataA, Rectangle rectangleB, Color[] dataB)
{
int top = Math.Max(rectangleA.Top, rectangleB.Top);
int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom);
int left = Math.Max(rectangleA.Left, rectangleB.Left);
int right = Math.Min(rectangleA.Right, rectangleB.Right);
for (int y = top; y < bottom; y++)
{
for (int x = left; x < right; x++)
{
Color colorA = dataA[(x - rectangleA.Left) + (y - rectangleA.Top) * rectangleA.Width];
Color colorB = dataB[(x - rectangleB.Left) + (y - rectangleB.Top) * rectangleB.Width];
if (colorA.A != 0 && colorB.A != 0)
{
return true;
}
}
}
return false;
}:
它工作正常,直到我想动画的东西。所以我有一个大约12帧的纹理精灵。我需要做的是获取每帧的颜色数据数组。这就是我获取颜色数据数组的方法:
Color[] playerColorArray = new Color[playerColorArray.X * playerColorArray.Y];
PlayerTexture.GetData(playerColorArray);
CData = playerColorArray;
现在我的猜测是每次帧更改时都必须更新textureData 有没有办法从每个帧中获取颜色数据?
答案 0 :(得分:1)
你可以得到一个完整的精灵表格纹理数组,只使用当前帧。
假设您有精灵表,stride
是像素与其下方像素的偏移量。这可以是精灵表的宽度。此外,您拥有当前帧第一个像素的位置x0
,y0
。然后你只需要修改索引计算:
int posXInFrame = (x - rectangleA.Left);
int posYInFrame = (y - rectangleA.Top);
Color colorA = dataA[(posXInFrame + x0) + (posYInFrame + y0) * stride];
可能您已经在其他地方计算了x0
和y0
,并且可以将这些值传递给函数。