ActionScript 3.0:如何访问Shape的段?

时间:2009-12-20 02:08:25

标签: flex flash actionscript-3 actionscript

编辑(澄清):
我有一个简单轮廓的矢量图像,一个不规则的闭合多边形 我需要以一种方式将其导入Flash,然后我可以以编程方式访问构成多边形的每个段 将矢量图像作为MovieClip导入库中并不好,因为我得到的是一个形状,我根本不能获取几何信息。
我的目标是能够计算多边形的面积,并计算多边形和另一个多边形之间的交点 我想我可以写一个Illustrator脚本来读取所有段并用它们的坐标写一个CSV文件,但是必须有一个更简单的方法,我的意思是,它们都是矢量的,它们应该相互理解。

谢谢!

- 旧帖子: -

我在矢量图形中有一个轮廓,我作为动画片段导入Flash库 我实现了动画片段,它有一个Shape子实体轮廓 我需要能够访问轮廓线段,即多边形的边,才能得到它们的起点和终点,有没有办法?
Graphics类只允许绘制,但绘制的内容(如Shape类)不是对象,它不是带边或其他的多边形。
我清楚了吗? 感谢

2 个答案:

答案 0 :(得分:2)

无法读取Graphics对象的数据(实际上是包含您所追踪的信息的内容。)这适用于已经绘制的任何矢量图形对象,可以是Graphics / drawing API本身,或在Flash CS3 / CS4中,或使用[Embed]元标记嵌入。

如果您需要计算代数区域,或者由于某些其他原因保留算法中的向量,最好的选择是从Illustrator中输出SVG或某些单用途格式(如点的CSV),以及在ActionScript中解析它。

另一种选择是使用BitmapData,并将Shape对象绘制到其上,然后计算彩色(不透明)像素以数值计算它的面积。

var bmp : BitmapData = new BitmapData(myShape.width, myShape.height, true, 0);
bmp.draw(myShape);

var i : uint;
var area : uint = 0;
var num_pixels : uint = bmp.width*bmp.height;
for (i=0; i<num_pixels; i++) {

  var px : uint = bmp.getPixel32(i%bmp.width, Math.floor(i/bmp.height));

  // Determine from px color/alpha whether it's part of the shape or not.
  // This particular if statement should determine whether the alpha
  // component (first 8 bits of the px integer) are greater than zero, i.e.
  // not transparent.
  if ((px >> 24) > 0)
    area++;
}

trace('number of opaque pixels (area): '+area);

根据您的应用程序,您也可以使用BitmapData.hitTest()方法进行碰撞检测。

答案 1 :(得分:1)

我相信你能做的最好的事情是在Shape对象上检索一个矩形边界框。根据您导入它的方式,您可以或不可以直接访问Shape对象作为实例变量;但是,如果这样做,你可以调用shapeVar.transform.getBounds()或shapeVar.transform.getRect()(bounds返回一个矩形,包括形状上的笔画,rect不会)。

我很好奇,所以我正在做一些关于获得一些像素界限的替代方法的研究。如果我找到有用的东西,我会进一步编辑。