Je veux dessiner une 2D, remplie, cercle. J'ai regardé partout et je ne peux pas sembler trouver quelque chose qui va même m'aider à distance de dessiner un cercle. Je veux simplement spécifier une hauteur et une largeur et une localisation sur ma toile. P>
Quelqu'un sache comment? p>
Merci! P>
7 Réponses :
hors de la boîte, il n'y a pas de support pour cela dans XNA. Je suppose que vous venez de quelques antécédents GDI et que vous voulez juste voir quelque chose de se déplacer à l'écran. Dans un vrai jeu cependant, cela est rarement si jamais nécessaire. p>
Il y a des informations utiles ici: p>
http://forums.xna.com/forums/t/7414.aspx p>
Mes conseils pour vous seraient simplement de tirer de la peinture ou de quelque chose et de créer vous-même les formes de base vous-même et utilisez le pipeline de contenu. P>
Xna n'a normalement aucune idée d'une toile que vous pouvez peindre. Au lieu de cela, vous pouvez créer un cercle dans votre programme de peinture préféré et le rendre comme un sprite ou créer une série de sommets dans un maillage 3D pour se rapprocher d'un cercle et rendre cela. P>
Une autre option (si vous souhaitez utiliser une brosse à gradient plus complexe ou quelque chose) consiste à dessiner un quad aligné sur l'écran et à utiliser un shader pixel. P>
Vous pouvez également consulter le cadre d'échantillon que Jeff Weber utilise à Farseer:
http://www.codeplex.com/farseerphysics p>
Les démos ont un générateur de texture dynamique qui lui permettait de créer des cercles et des rectangles (que les échantillons utilisent ensuite comme visualisation de la simulation physique). Vous pouvez simplement réutiliser cela: -) p>
avait le même problème, car d'autres ont déjà suggéré que vous devez dessiner un carré ou un rectangle avec une texture de cercle dessus. Voici ma méthode pour créer une texture de cercle d'exécution. Pas le moyen le plus efficace ou la plus fantaisie de le faire, mais cela fonctionne.
Texture2D createCircleText(int radius) { Texture2D texture = new Texture2D(GraphicsDevice, radius, radius); Color[] colorData = new Color[radius*radius]; float diam = radius / 2f; float diamsq = diam * diam; for (int x = 0; x < radius; x++) { for (int y = 0; y < radius; y++) { int index = x * radius + y; Vector2 pos = new Vector2(x - diam, y - diam); if (pos.LengthSquared() <= diamsq) { colorData[index] = Color.White; } else { colorData[index] = Color.Transparent; } } } texture.SetData(colorData); return texture; }
Le diamètre est défini comme le temps de rayon 2 . Ce serait mieux si vous avez échangé ces noms variables.
public Texture2D createCircleText(int radius, GraphicsDevice Devise,Color color,int tickenes) { Texture2D texture = new Texture2D(Devise, radius, radius); Color[] colorData = new Color[radius * radius]; if (tickenes >= radius) tickenes = radius - 5; float diam = radius / 2f; float diamsq = diam * diam; float intdiam = (radius-tickenes) / 2f; float intdiamsq = intdiam * intdiam; for (int x = 0; x < radius; x++) { for (int y = 0; y < radius; y++) { int index = x * radius + y; Vector2 pos = new Vector2(x - diam, y - diam); if (pos.LengthSquared() <= diamsq) { colorData[index] = color; } else { colorData[index] = Color.Transparent; } if (pos.LengthSquared() <= intdiamsq) { colorData[index] = Color.Transparent; } } } texture.SetData(colorData); return texture; }
Ce que j'ai fait pour résoudre ce problème, c'était de peindre une texture rectangulaire, laissant la zone du rectangle qui ne contient pas le cercle transparent. Vous vérifiez si un point de la matrice est contenu dans un cercle provenant du centre du rectangle.
Utilisation de la matrice de données de couleur est un peu bizarre car il n'est pas un tableau 2D. Ma solution consistait à apporter une logique de tableau 2D dans le scénario. P> et voici la méthode pour vérifier si un point est contenu dans votre cercle: P> espère que cela aide! p> p>