2010-03-25 106 views
8

我想绘制一个2d的填充圆。我到处寻找,似乎无法找到任何能够远程帮助我画圆的东西。我只是想在画布上指定高度和宽度以及位置。在XNA中绘制简单的圆圈

任何人都知道如何?

谢谢!

回答

11

XNA通常不会有你可以在上面画画的想法。相反,您可以在您最喜欢的绘画程序中创建一个圆圈并将其渲染为精灵,或者在3D网格中创建一系列顶点以近似圆并渲染它。

+0

这看起来好像会奏效。谢谢! – 2010-03-25 21:20:04

3

开箱即用,在XNA中没有对此的支持。我假设你来自一些GDI背景,只想看看屏幕上移动的东西。然而在真实的游戏中,这很少需要。

有一些有用的信息在这里:

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

我给你的建议是刚刚火起来漆什么的,自己创建基本的形状和使用内容管道。

2

另一种选择(如果你想使用更复杂的渐变画笔或其他东西)是绘制一个与画面对齐的四边形,并使用像素着色器。

8

你也可以检查出杰夫·韦伯使用在先知示例框架:
http://www.codeplex.com/FarseerPhysics

的演示有一个动态纹理生成器,它可以让他做圆形和矩形(该样本,然后为一体的可视化使用物理模拟)。你可以只是重新使用该:-)

5

有同样的问题,正如其他人已经建议你需要画一个正方形或长方形对它的圆形纹理。下面是我创建圆形纹理运行时的方法。不是最有效或最花哨的方法,但它有效。

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