2010-06-06 27 views
10

XNA no tiene ningún método que admita el dibujo circular.
Normalmente cuando tenía que dibujar un círculo, siempre con el mismo color, acababa de hacer una imagen con ese círculo y luego podía mostrarlo como un sprite.
Pero ahora el color del círculo se especifica durante el tiempo de ejecución, ¿alguna idea de cómo lidiar con eso?Cómo dibujar un círculo con un color específico en XNA?

+0

Recuerdo haber leído algo así en los foros de XNA. – Mike

Respuesta

37

Puede simplemente hacer una imagen de un círculo con un fondo Transparent y la parte coloreada del círculo como White. Entonces, cuando se trata de dibujar los círculos en el método Draw(), seleccionar el tinte como lo que usted quiere que sea:

Texture2D circle = CreateCircle(100); 

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

Sólo por diversión, aquí es el método 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; 
    } 
+0

Sé que este hilo es muy antiguo, pero tu código me devuelve un círculo. ¿Sabrías por algún cambio cómo puedo solucionar esto? – Weszzz7

+13

@ Weszzz7, ¿NO se SUPONE devolver un círculo? – Cyral

Cuestiones relacionadas