2010-06-06 30 views
10

XNA'nın daire çizimini destekleyen herhangi bir yöntemi yoktur.
Normalde, her zaman aynı renkte bir daire çizmek zorunda kaldığımda, o daireyle görüntü oluşturdum ve sonra bunu bir hareketli görüntü olarak gösterebiliyorum.
Fakat şimdi çemberin rengi çalışma zamanı sırasında belirtildi, bununla nasıl başa çıkılacağı hakkında herhangi bir fikir var mı?XNA'da belirli bir renkle daire nasıl çizilir?

+0

XNA forumlarında böyle bir şey okumayı hatırlıyorum. – Mike

cevap

37

Transparent arkaplan ve dairenin renkli bölümünü White olarak bir dairenin görüntüsünü oluşturabilirsiniz.

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; 
    } 
:

Texture2D circle = CreateCircle(100); 

// Change Color.Red to the colour you want 
spriteBatch.Draw(circle, new Vector2(30, 30), Color.Red); 

Sadece eğlence için, burada CreateCircle yöntemi şudur: Draw() yöntemde çevrelerin hazırlanması gerektiğinde bunu olmak istediğini Ardından gibi renk tonunu seçmek

+0

Bu yazının gerçekten eski olduğunu biliyorum, ancak kodunuz benim için bir çevre döndürüyor. Herhangi bir değişiklikle bunu nasıl düzeltebilirim? – Weszzz7

+13

@ Weszzz7, Bir daire döndürmek için SORULANMADI? – Cyral

İlgili konular