1

XNA 中有一个类似的问题System.Drawing,但这可能是一个更清晰的问题,因此更容易回答。

我们试图用 C# 在屏幕上画线。我们正在使用 XNA 库。这段代码

    void DrawLine2 (Vector2 point1, Vector2 point2)
    {
        System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Green, 1);
        Point p1 = new Point((int)point1.X, (int)point1.Y), p2 = new Point((int)point2.X, (int) point2.Y);
        Graphics.DrawLine (pen, p1, p2);
    }

给出 Graphics 不存在的编译时错误。

也许我应该在 XNA 中而不是在 System 中使用某些东西来画线——但如果是这样,我不确定是什么。XNA 有一个 Spritebatch 绘图功能,但 AFAIK 你给它一个精灵和一个中心(和一个旋转),而不是 2 个点。

4

2 回答 2

10

试试这个方便的扩展方法,

public static void DrawLine(this SpriteBatch spriteBatch, Vector2 begin, Vector2 end, Color color, int width = 1)
{
    Rectangle r = new Rectangle((int)begin.X, (int)begin.Y, (int)(end - begin).Length()+width, width);
    Vector2 v = Vector2.Normalize(begin - end);
    float angle = (float)Math.Acos(Vector2.Dot(v, -Vector2.UnitX));
    if (begin.Y > end.Y) angle = MathHelper.TwoPi - angle;
    spriteBatch.Draw(1X1 PIXEL TEXTURE, r, null, color, angle, Vector2.Zero, SpriteEffects.None, 0);
}
于 2013-05-06T20:58:04.387 回答
3

Spritebatch 可用于绘制一条线,正如 Beanish 评论的那样,您可以简单地制作一个像素精灵并在两点之间扩展它。

这是一个很棒的库,用于在 XNA 中绘制 2D 图元,它使用绘制线条的技术以及其他对象(如弧线)。我广泛使用它:

http://sourceforge.net/projects/primitives2d/

于 2013-05-06T17:26:15.647 回答