2010-03-25 18 views
8

Ich möchte einen 2D, gefüllt, Kreis zeichnen. Ich habe überall hingeschaut und finde nichts, was mir auch nur im Entferntesten helfen würde, einen Kreis zu zeichnen. Ich möchte einfach eine Höhe, Breite und Position auf meiner Leinwand angeben.Zeichne einfachen Kreis in XNA

Wer weiß wie?

Danke!

Antwort

11

XNA hat normalerweise keine Vorstellung von einer Leinwand, auf die Sie malen können. Stattdessen können Sie entweder einen Kreis in Ihrem bevorzugten Malprogramm erstellen und ihn als Sprite rendern oder in einem 3D-Netz einen Serienscheitelpunkt erstellen, um einen Kreis zu approximieren und diesen zu rendern.

+0

Das scheint wie es wird gut funktionieren. Vielen Dank! –

3

Out-of-the-Box, es gibt keine Unterstützung dafür in XNA. Ich gehe davon aus, dass Sie von einem GDI-Hintergrund kommen und nur etwas auf dem Bildschirm sehen möchten. In einem echten Spiel ist dies selten, wenn es jemals gebraucht wird.

Es gibt einige hilfreiche Informationen hier:

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

Mein Rat an Sie wäre, nur malen oder etwas Feuer, und schaffen die Grundformen selbst und die Content Pipeline verwenden.

2

Eine andere Option (wenn Sie einen komplexeren Gradientenpinsel oder etwas anderes verwenden möchten) besteht darin, ein Quad zu zeichnen, das auf den Bildschirm ausgerichtet ist und einen Pixelshader verwendet.

8

Sie könnten auch die Probe Rahmen überprüfen, die Jeff Weber in Farseer verwendet:
http://www.codeplex.com/FarseerPhysics

Die Demos haben einen dynamischen Textur-Generator, den er Kreise machen lassen sind und Rechtecke (die die Proben dann als die Visualisierung verwenden von die Physik-Simulation). Sie könnten nur wieder zu verwenden, die :-)

5

hatte das gleiche Problem, wie andere bereits vorgeschlagen, dass Sie benötigen ein Quadrat oder Rechteck mit einem Unentschieden Kreis Textur drauf. Hier folgt meine Methode zum Erstellen einer Circle Texture Runtime. Nicht die effizienteste oder raffinierteste Art, es zu tun, aber es funktioniert.

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; 
} 
Verwandte Themen