2010-03-25 24 views
8

Quiero dibujar un 2d, lleno, círculo. He buscado en todas partes y parece que no puedo encontrar nada que me ayude a dibujar un círculo. Simplemente quiero especificar un alto y ancho y una ubicación en mi lienzo.Dibujar círculo simple en XNA

¿Alguien sabe cómo?

Gracias!

Respuesta

11

XNA normalmente no tiene una idea de un lienzo en el que pueda pintar. En su lugar, puede crear un círculo en su programa de pintura favorito y renderizarlo como un sprite o crear una serie de vértices en una malla 3D para aproximar un círculo y representarlo.

+0

Parece que va a funcionar bien. ¡Gracias! –

3

Fuera de la caja, no hay soporte para esto en XNA. Supongo que vienes de un fondo de GDI y solo quiero ver algo moviéndose en la pantalla. Sin embargo, en un juego real, esto rara vez se necesita.

Hay algo de información útil aquí:

http://forums.xna.com/forums/t/7414.aspx

Mi consejo sería que solo use pintura o algo así, y crear las formas básicas de sí mismo y utilizar el Content Pipeline.

2

Otra opción (si desea utilizar un pincel degradado más complejo o algo así) es dibujar un quad alineado a la pantalla y utilizar un sombreador de píxeles.

8

También podría retirar el marco de la muestra que Jeff Weber utiliza en Farseer:
http://www.codeplex.com/FarseerPhysics

Las demostraciones tienen un generador de textura dinámica que Vamos a hacer círculos y rectángulos (el cual las muestras se utilizan como la visualización de la simulación física). Se podía volver a usar que :-)

5

tenía el mismo problema, como otros ya se ha sugerido que necesita para dibujar un cuadrado o un rectángulo con una círculo de textura en él. Aquí sigue mi método para crear un tiempo de ejecución de texturas circulares. No es la forma más eficiente o elegante de hacerlo, pero funciona.

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; 
} 
Cuestiones relacionadas