2010-03-25 13 views
8

Voglio disegnare un cerchio 2d, pieno. Ho guardato dappertutto e non riesco a trovare nulla che possa anche solo aiutarmi a disegnare un cerchio. Voglio semplicemente specificare altezza, larghezza e posizione sulla mia tela.Disegna un cerchio semplice in XNA

Qualcuno sa come?

Grazie!

risposta

11

XNA normalmente non ha un'idea di una tela su cui è possibile dipingere. Invece puoi creare un cerchio nel tuo programma di pittura preferito e renderlo come uno sprite o creare una serie di vertici in una mesh 3D per approssimare un cerchio e renderlo visibile.

+0

Sembra che funzioni bene. Grazie! –

3

Fuori dalla scatola, non c'è supporto per questo in XNA. Presumo che tu venga da qualche background GDI e voglio solo vedere qualcosa che si muove sullo schermo. In un gioco vero però, questo è raramente, se mai necessario.

C'è un po 'di informazioni utili qui:

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

Il mio consiglio sarebbe quello di sparare solo la vernice o qualcosa del genere, e creare le forme di base se stessi e utilizzare la Content Pipeline.

2

Un'altra opzione (se si desidera utilizzare un pennello sfumato più complesso o qualcosa del genere) è disegnare un quad allineato allo schermo e utilizzare un pixel shader.

8

Si potrebbe anche verificare il quadro di esempio che Jeff Weber utilizza in Veggente:
http://www.codeplex.com/FarseerPhysics

Le demo sono un generatore di consistenza dinamica che ti permette di fare di lui cerchi e rettangoli (che i campioni poi utilizzano come la visualizzazione di la simulazione fisica). Si può solo ri-uso che :-)

5

avuto lo stesso problema, come altri già suggerito è necessario disegnare un quadrato o un rettangolo con un cerchio su di esso. Segue il mio metodo per creare un runtime di Circle Circle. Non è il modo più efficiente o elegante per farlo, ma funziona.

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; 
} 
Problemi correlati