如何在AS3中获得一条线的两个点?

时间:2011-10-15 08:44:46

标签: flash actionscript-3 actionscript

我有一个组件(链接到Test类),其中包含一行,我将此行的一个点放到(0,0)。

然后将其拖动到Flash(fla),并在AS3中获取其Shape,如:

// in Test.as
// assume that the movie clip only contain one line.
var line:Shape = Shape(getChildAt(0));

我可以得到这一行的一个点xy变量line。但是如何获得这条线的另一个观点呢?

编辑: 忽略上面的组件,这里有另一个问题,但我想它与上面的问题几乎相同:

从(0,0)到(10,10)画一条线并从(10,0)到(0,10)绘制另一条线,如何在AS3中得到那些两点形式的线?

如果我以Shape的形式访问它们,那么我会得到两个具有相同xywidthheight值的相似形状。 AS3是否有某种方式可以作为 REAL 行访问行而不仅仅是一个形状?或者它有什么方法可以计算出来吗?

2 个答案:

答案 0 :(得分:0)

AS3中的Shape类不包含构成形状的点。相反,它是您可以创建的最具有骨架的显示对象,它具有图形对象(无鼠标事件调度,不能包含显示对象等)。它的名字往往给人的印象更多,但事实并非如此。无论您从绘图调用中获取什么内容,都无法从形状中获取...或者通常来自AS3中的任何显示对象。

宽度和高度x和y只是显示对象属性,它们基于它的边界。如果你想表示各个点,那么你必须创建自己的点结构,这些结构最终会被用来制作绘图调用,以便以后可视化。

如果您最终存储点然后让每个形状绘制它们,并希望能够缩放或平移各个形状并希望将点放在除本地形状之外的坐标空间中,DisplayObject的localToGlobal和globalToLocal可能对您有用。

var local:Point = new Point(10, 10);
var global:Point = someShape.localToGlobal(localPoint);
var inNewCoord:Point = parentContainer.globalToLocal(globalPoint)

如果你真的需要找到这个矢量数据......你可能想看看这篇文章: http://wahlers.com.br/claus/blog/hacking-swf-1-shapes-in-flash/

然而,这涉及实际解析swf的字节数据。

答案 1 :(得分:0)

我最终有一个很好的方法来做到这一点。

我们走了:

  1. 创建一个符号并从原点(0,0)到(x,0)
  2. 绘制一条线
  3. 将此符号链接到您的源代码,让我们调用Line
  4. 将此符号拖动到舞台上,然后旋转,根据需要进行缩放。
  5. 代码Line中的
  6. var v:Point = new Point(getBounds(this).right, 0);
    v = localToGlobal(v);
    

    然后(x,y)和(v.x,v.y)可以代表这一行。