【问题标题】:Actionscript / flash lineTo behaviorActionscript / flash lineTo 行为
【发布时间】:2014-03-31 10:56:14
【问题描述】:

我最近在创建自定义 flex 组件时遇到了一个问题,它出现在 lineTo 行为中。

假设我使用宽度为 200、200 的 drawRect 绘制了一个 Rectangle。这意味着它的坐标范围为 0、0 到 199、199。然后我在这个矩形内绘制一条从 0、10 到 200、10 的线。它绘制正确地从 0、10 到 199、10,即线的右端与 Rectangle 的右边缘对齐;没有过冲/下冲。下面是代码。

var g:Graphics = graphics;
g.clear();
g.beginFill(0x0000ff, 1);
g.drawRect(0, 0, unscaledWidth, unscaledHeight);
g.endFill();

g.lineStyle(0, 0xff0000, 1);
g.moveTo(0, 10);
g.lineTo(200, 10);

这是否意味着 lineTo 不包括最后一点 (199,10)?我用 getBounds/getRect 试过这个(只有一条没有矩形的水平线,它也打印为(x:0,y:10,w:200,h:0)。即宽度为 200(从 0 到199)。

var g:Graphics = graphics;
g.clear();
g.lineStyle(0, 0xff0000, 1);
g.moveTo(0, 10);
g.lineTo(200, 10);
trace ("Bounds:", getBounds(this)); // prints (x:0, y:0, w:200, h:0)
trace ("Rect:", getRect(this)); // prints (x:0, y:0, w:200, h:0)

但是,如果我从右到左画线,从 (199, 10) 到 (-1, 10)。直线的右端和 Rectangle 的右边缘之间有一个间隙。这条线也超出了左侧的 Rectangle 一个单位。

var g:Graphics = graphics;
g.clear();
g.beginFill(0x0000ff, 1);
g.drawRect(0, 0, unscaledWidth, unscaledHeight);
g.endFill();

g.lineStyle(0, 0xff0000, 1);
g.moveTo(199, 10);
g.lineTo(-1, 10);

这似乎是从右到左的 lineTo 行为与从左到右的 lineTo 行为不同;我怀疑是这种情况,我认为我遗漏了一些东西。有谁知道我错过了什么?

编辑:user2139426 的后续回答

也就是说,如果我从 (0, 0) 到 (200, 0) 画一条线。将从 (0,0) 的左上角(包括整个像素宽度)绘制到 (200, 0) 的左上角(仅包括像素 (199, 0) 和一小部分)在 (200, 0) 中。那是对的吗?

实际包含左上角的哪个部分,这点能知道吗?

这似乎是一个非常重要的细节。我通读了 Adob​​e 文档、Essential Actionscript、AS Bible 等,他们总是解释为好像包含了整个像素。您是否知道任何可以清楚地解释此类内容的资源(文档/书籍)?还是只是一般的图形编程(我是新手)。

【问题讨论】:

    标签: flash actionscript drawing behavior


    【解决方案1】:

    你正在思考像素。

    尝试在向量中思考。您在屏幕上看到的像素上方的线条并不完全位于该像素上方,而是位于该像素的左上角。

    从 0 到 200 宽度的线是 200 0点在像素-1和像素0之间,点200在像素199和像素200之间。

    从 -1 到 199 宽度的线是 200 点-1在像素-2和像素-1之间,点199在像素198和像素199之间。

    lineTo 的行为很好。

    【讨论】:

    • 这也许可以解释!只是上面附加的一个快速跟进问题。谢谢你的回答。
    • 更好的起点是阅读参考指南(链接)中对您使用的方法的描述,通常您会在其中找到示例,有时还会找到解释它们的详细图形。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 在该链接中查找 lineStyle
    • 实际上,我阅读了大部分(如果不是全部)文档和示例。我在任何地方都找不到它说线条实际上是在开始像素和结束像素的左上角之间绘制的。他们只是说从一个点 (a,b) 到 (c,d) 例如see this link。它只是说从 (100, 100) 到 (200, 200)。同样,它们只是样式让您可以控制厚度等。与一些流行的 AS3 书籍的图形编程章节相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2010-12-29
    • 2011-02-04
    • 2010-09-14
    相关资源
    最近更新 更多