【问题标题】:Fill a 2D Rectangle填充 2D 矩形
【发布时间】:2012-12-07 14:38:24
【问题描述】:

我是 XNA 的新手,现在我正在使用以下代码绘制一个矩形:

// Calculate particle intensity
intense = (int)((float)part.Life / PARTICLES_MAX_LIFE);
// Generate pen for the particle
pen = new Pen(Color.FromArgb(intense * m_Color.R , intense * m_Color.G, intense * m_Color.B));
// Draw particle
g.DrawRectangle(pen, part.Position.X, part.Position.Y, 
    Math.Max(1,8 * part.Life / PARTICLES_MAX_LIFE),
    Math.Max(1,8 * part.Life / PARTICLES_MAX_LIFE));
pen.Dispose();

我在网上找到的用颜色填充矩形的所有方法似乎都不适用于我绘制矩形的方式。如何用颜色填充它?

【问题讨论】:

  • 您确定这是 XNA 代码吗?这在我看来更像是 GDI。
  • 老实说,我在网上找到了这段代码,该线程是关于 xna 中的粒子的......但它仍然可以在 Visual Studio 中作为 xna 使用
  • 这绝对不像 XNA。在 XNA 中,您可以通过制作 1px x 1px 纹理并使用 SpriteBatch 来绘制矩形,如下所示:spriteBatch.Draw(pixelTexture, new Rectangle(x, y, width, height), color);
  • 它“作为 XNA”工作,因为 XNA 仍然托管在 Windows 窗体中。可以在here 找到执行您想要的 GDI 方法,但我强烈建议您在继续开发之前了解更多有关实际 XNA 代码的信息。 XNA Creator's Hub 有很多资源。
  • Draw Rectangle with XNA的可能重复

标签: c# xna 2d draw


【解决方案1】:

您的代码很可能是为 GDI 而不是 XNA 编写的,因此它无法正常工作。

但是,XNA 包含一个非常有用的Rectangle 结构。

这意味着您可以“拉伸”图像以填充矩形,因此创建一个 1x1 像素的新 Texture2D,并在绘制时拉伸尺寸以增加大小..(或者您可以加载一个)

Texture2D texture = new Texture2D(graphics, 1, 1, false, SurfaceFormat.Color);
texture.SetData<Color>(new Color[] { Color.White });
return texture;

您可以将此小纹理与Rectangle based overload 方法结合使用,用于SpriteBatch

spriteBatch.Draw(texture, new Rectangle(X, Y, Width, Height), Color.White);

根据自己的喜好更改WidthHeight、位置和颜色。

【讨论】: