Как нарисовать круг с определенным цветом в XNA? - PullRequest
10 голосов
/ 06 июня 2010

XNA не имеет методов, поддерживающих рисование круга.
Обычно, когда мне приходилось рисовать круг, всегда одним и тем же цветом, я просто делал изображение с этим кругом, а затем мог отображать его в виде спрайта.
Но теперь цвет круга задается во время выполнения, есть идеи, как с этим бороться?

1 Ответ

37 голосов
/ 06 июня 2010

Вы можете просто сделать изображение круга с Transparent фоном и цветной частью круга как White. Затем, когда дело доходит до рисования кругов в методе Draw(), выберите оттенок таким, каким вы хотите его видеть:

Texture2D circle = CreateCircle(100);

// Change Color.Red to the colour you want
spriteBatch.Draw(circle, new Vector2(30, 30), Color.Red); 

Просто для удовольствия, вот метод CreateCircle:

    public Texture2D CreateCircle(int radius)
    {
        int outerRadius = radius*2 + 2; // So circle doesn't go out of bounds
        Texture2D texture = new Texture2D(GraphicsDevice, outerRadius, outerRadius);

        Color[] data = new Color[outerRadius * outerRadius];

        // Colour the entire texture transparent first.
        for (int i = 0; i < data.Length; i++)
            data[i] = Color.TransparentWhite;

        // Work out the minimum step necessary using trigonometry + sine approximation.
        double angleStep = 1f/radius;

        for (double angle = 0; angle < Math.PI*2; angle += angleStep)
        {
            // Use the parametric definition of a circle: http://en.wikipedia.org/wiki/Circle#Cartesian_coordinates
            int x = (int)Math.Round(radius + radius * Math.Cos(angle));
            int y = (int)Math.Round(radius + radius * Math.Sin(angle));

            data[y * outerRadius + x + 1] = Color.White;
        }

        texture.SetData(data);
        return texture;
    }
...