0

これは、衝突を検出するために私が持っているものです。

 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 を更新する必要があるということです。各フレームのみから色データを取得する方法はありますか?

4

1 に答える 1

1

完全なスプライト シート テクスチャの配列を取得し、現在のフレームのみを使用できます。

スプライト シートがありstride、その下のピクセルに対するピクセルのオフセットであるとします。これは、スプライト シートの幅になります。さらに、現在のフレームの最初のピクセルの位置x0があります。y0次に、インデックスの計算を変更する必要があります。

int posXInFrame = (x - rectangleA.Left);
int posYInFrame = (y - rectangleA.Top);
Color colorA = dataA[(posXInFrame + x0) + (posYInFrame + y0) * stride];

おそらく、他の場所で計算x0y0て、それらの値を関数に渡すことができます。

于 2012-10-22T21:19:11.087 に答える