Как нарисовать круг с определенным цветом в XNA?

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

10
задан Tomek Tarczynski 6 June 2010 в 10:12
поделиться

1 ответ

Вы можете просто сделать изображение круга с прозрачным фоном и цветной частью круга как белой. Затем, когда дело дойдет до рисования кругов в методе 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;
    }
37
ответ дан 3 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: