How to draw circle with specific color in XNA?

后端 未结 1 1061
借酒劲吻你
借酒劲吻你 2021-02-20 11:03

XNA doesn\'t have any methods which support circle drawing.
Normally when I had to draw circle, always with the same color, I just made image with that circle and then I cou

1条回答
  •  北荒
    北荒 (楼主)
    2021-02-20 11:41

    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 讨论(0)
提交回复
热议问题