Нарисуйте прямоугольник в XNA, используя SpriteBatch - PullRequest
15 голосов
/ 22 апреля 2011

Я пытаюсь нарисовать прямоугольник в XNA, используя spritebatch. У меня есть следующий код:

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

Но по какой-то причине он ничего не рисует. Есть идеи, что случилось? Спасибо!

Ответы [ 3 ]

35 голосов
/ 22 апреля 2011

Вот код, который вы можете поместить в класс, полученный из Game.Это демонстрирует, как и где создать белую текстуру с квадратом в 1 пиксель (плюс, как избавиться от нее, когда вы закончите).И как вы можете затем масштабировать и тонировать эту текстуру во время рисования.

Для рисования прямоугольников плоского цвета этот метод предпочтительнее, чем создание самой текстуры нужного размера.

19 голосов
/ 22 апреля 2011

У вашей текстуры нет данных. Вам необходимо установить данные пикселей:

 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);
8 голосов
/ 11 июля 2012

Я только что сделал что-то очень простое, что вы можете вызвать из вашего 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);
...