XNA n'a aucune méthode qui supporte le dessin en cercle.
Normalement, quand je devais dessiner un cercle, toujours avec la même couleur, je faisais juste une image avec ce cercle et ensuite je pouvais l'afficher comme un sprite.
Mais maintenant la couleur du cercle est spécifiée pendant l'exécution, des idées pour y faire face?Comment dessiner un cercle avec une couleur spécifique dans XNA?
10
A
Répondre
37
Vous pouvez simplement créer une image d'un cercle avec un arrière-plan Transparent
et la partie colorée du cercle comme White
. Puis, quand il s'agit de dessiner des cercles dans la méthode Draw()
, sélectionnez la teinte que ce que vous voulez qu'il soit:
Texture2D circle = CreateCircle(100);
// Change Color.Red to the colour you want
spriteBatch.Draw(circle, new Vector2(30, 30), Color.Red);
Juste pour le plaisir, voici la méthode 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;
}
Je me souviens avoir lu quelque chose comme ça sur les forums de XNA. – Mike