C# を使用して XNA で小さなトップ ダウン シューティング ゲームを構築しており、ピクセルごとの衝突検出を実装しようとしています。衝突を含む四角形を返す標準の境界ボックス検出に沿って、次のコードを実行します。
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++)
{
//Check alpha values
Color colourA = dataA[(x - object1.Left) + (y - object1.Top) * object1.Width];
Color colourB = dataB[(x - object2.Left) + (y - object2.Top) * object2.Width];
if (colourA.A != 0 && colourB.A != 0)
{
return true;
}
}
}
return false;
}
それがうまくいくと確信していますが、スプライトシートからチェックするオブジェクトのいくつかを取得しようとしています。このコードを使用してカラーデータを取得しようとしていますが、エラーが発生しています「渡されたデータのサイズがこのリソースに対して大きすぎるか小さすぎます」と言っています。
Color[] pacmanColour = new Color[frameSize.X * frameSize.Y];
pacman.GetData(0, new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y), pacmanColour,
currentFrame.X * currentFrame.Y, (sheetSize.X * sheetSize.Y));
私は何を間違っていますか?