谢谢!
- 旧帖子: -
我在矢量图形中有一个轮廓,我作为动画片段导入Flash库
我实现了动画片段,它有一个Shape子实体轮廓
我需要能够访问轮廓线段,即多边形的边,才能得到它们的起点和终点,有没有办法?
Graphics类只允许绘制,但绘制的内容(如Shape类)不是对象,它不是带边或其他的多边形。
我清楚了吗?
感谢
答案 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不会)。
我很好奇,所以我正在做一些关于获得一些像素界限的替代方法的研究。如果我找到有用的东西,我会进一步编辑。