3

私はxnaにかなり慣れていません。透明な背景(マゼンタ)のスプライトを作成しました。問題は、私の Rectangle が、目に見えるスプライトではなく、スプライト全体の座標を読み取っていることです。表示されているスプライトのみを読み取るにはどうすればよいですか。

myrectangle = new Rectangle(0, 0, box.Width, box.Height);

その位置に透明ではない可視部分を配置したい。前もって感謝します。

4

4 に答える 4

1

マゼンタのような透明な色分けを使用するのは非常に時代遅れです。現在、これを実現するために画像にアルファを使用しています。

あなたがやりたいことをする唯一の本当の方法は、カラーデータを検索して、アルファ> 0、またはあなたの場合は!= Color.Magentaを持つ最小および最大のx座標とy座標を見つけることだと思います。

Texture2D sprite = Content.Load<Texture2D>(.....);
int width = sprite.Width;
int height = sprite.Height;
Rectangle sourceRectangle = new Rectangle(int.Max, int.Max, 0, 0);
Color[] data = new Color[width*height];
sprite.GetData<Color>(data);
int maxX = 0;
int maxY = 0;

for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {    
        int index = width * y + x;

        if (data[index] != Color.Magenta)
        {

            if (x < sourceRectangle.X)
                sourceRectangle.X = x;
            else if (x > maxX)
                maxX = x;

            if (y < sourceRectangle.Y)
                sourceRectangle.Y = y;
            else if (y > maxY)
                maxY = y;        
        }
    }
}

sourceRectangle.Width = maxX - sourceRectangle.X;
sourceRectangle.Height = maxY - sourceRectange.Y;
于 2013-08-28T06:32:11.690 に答える