web-dev-qa-db-ja.com

SpriteBatchを使用してXNAで四角形を描画する

スプライトバッチを使用して、XNAで四角形を描画しようとしています。私は次のコードを持っています:

        Texture2D rect = new Texture2D(graphics.GraphicsDevice, 80, 30);
        Vector2 coor = new Vector2(10, 20);
        spriteBatch.Draw(rect, coor, Color.Chocolate);

しかし、それは何らかの理由で何も描画しません。何が間違っているのでしょうか?ありがとう!

16
user700996

テクスチャにデータがありません。ピクセルデータを設定する必要があります。

 Texture2D rect = new Texture2D(graphics.GraphicsDevice, 80, 30);

 Color[] data = new Color[80*30];
 for(int i=0; i < data.Length; ++i) data[i] = Color.Chocolate;
 rect.SetData(data);

 Vector2 coor = new Vector2(10, 20);
 spriteBatch.Draw(rect, coor, Color.White);
20
Mark Cidade

Gameから派生したクラスに配置できるコードを次に示します。これは、白い1ピクセルの正方形のテクスチャを作成する場所と方法の両方を示しています(完了したら、それを破棄する方法も示しています)。そして、描画時にそのテクスチャをどのようにスケーリングおよび着色できるか。

単色の長方形を描く場合、この方法は、テクスチャ自体を目的のサイズで作成するよりも望ましい方法です。

SpriteBatch spriteBatch;
Texture2D whiteRectangle;

protected override void LoadContent()
{
    base.LoadContent();
    spriteBatch = new SpriteBatch(GraphicsDevice);
    // Create a 1px square rectangle texture that will be scaled to the
    // desired size and tinted the desired color at draw time
    whiteRectangle = new Texture2D(GraphicsDevice, 1, 1);
    whiteRectangle.SetData(new[] { Color.White });
}

protected override void UnloadContent()
{
    base.UnloadContent();
    spriteBatch.Dispose();
    // If you are creating your texture (instead of loading it with
    // Content.Load) then you must Dispose of it
    whiteRectangle.Dispose();
}

protected override void Draw(GameTime gameTime)
{
    base.Draw(gameTime);
    GraphicsDevice.Clear(Color.White);
    spriteBatch.Begin();

    // Option One (if you have integer size and coordinates)
    spriteBatch.Draw(whiteRectangle, new Rectangle(10, 20, 80, 30),
            Color.Chocolate);

    // Option Two (if you have floating-point coordinates)
    spriteBatch.Draw(whiteRectangle, new Vector2(10f, 20f), null,
            Color.Chocolate, 0f, Vector2.Zero, new Vector2(80f, 30f),
            SpriteEffects.None, 0f);

    spriteBatch.End();
}
37
Andrew Russell

Drawメソッドから呼び出すことができる非常に単純なものを作成しました。簡単に任意の寸法の長方形を作成できます。

private static Texture2D rect;

private void DrawRectangle(Rectangle coords, Color color)
{
    if(rect == null)
    {
        rect = new Texture2D(ScreenManager.GraphicsDevice, 1, 1);
        rect.SetData(new[] { Color.White });
    }
    spriteBatch.Draw(rect, coords, color);
}

使用法:

DrawRectangle(new Rectangle((int)playerPos.X, (int)playerPos.Y, 5, 5), Color.Fuchsia);
9
GONeale