2010-06-06 5 views
10

XNA non ha alcun metodo che supporti il ​​disegno circolare.
Normalmente quando ho dovuto disegnare un cerchio, sempre con lo stesso colore, ho appena creato un'immagine con quel cerchio e quindi ho potuto visualizzarlo come uno sprite.
Ma ora il colore del cerchio viene specificato durante il runtime, qualche idea su come affrontarlo?Come disegnare cerchi con colori specifici in XNA?

+0

Ricordo di aver letto qualcosa del genere nei forum di XNA. – Mike

risposta

37

È sufficiente creare un'immagine di un cerchio con uno sfondo Transparent e la parte colorata del cerchio come White. Poi, quando si tratta di disegnare i cerchi nel metodo Draw(), selezionare la tinta come quello che vuoi che sia:

Texture2D circle = CreateCircle(100); 

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

Solo per divertimento, qui è il metodo 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

So che questo thread è molto vecchio, ma il tuo codice restituisce un cerchio per me. Vorresti qualche cambiamento sapere come posso risolvere questo? – Weszzz7

+13

@ Weszzz7, non è SOSPESO restituire un cerchio? – Cyral