开发者

How to draw circle with specific color in XNA?

开发者 https://www.devze.com 2023-01-02 05:33 出处:网络
XNA doesn\'t have any methods which support circle drawing. Norm开发者_StackOverflow社区ally when I had to draw circle, always with the same color, I just made image with that circle and then I could

XNA doesn't have any methods which support circle drawing.

Norm开发者_StackOverflow社区ally when I had to draw circle, always with the same color, I just made image with that circle and then I could display it as a sprite.

But now the color of the circle is specified during runtime, any ideas how to deal with that?


You can simply make an image of a circle with a Transparent background and the coloured part of the circle as White. Then, when it comes to drawing the circles in the Draw() method, select the tint as what you want it to be:

Texture2D circle = CreateCircle(100);

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

Just for fun, here is the CreateCircle method:

    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;
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号