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?
10
A
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;
}
Ricordo di aver letto qualcosa del genere nei forum di XNA. – Mike