2010-06-06 8 views
10

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?

+0

Je me souviens avoir lu quelque chose comme ça sur les forums de XNA. – Mike

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; 
    } 
+0

Je sais que ce fil est vraiment vieux, mais votre code me renvoie un cercle. Souhaitez-vous, par un changement, savoir comment je peux résoudre ce problème? – Weszzz7

+13

@ Weszzz7, N'est-il pas SUPPOSÉ de retourner un cercle? – Cyral

Questions connexes