我正在 Flash 中制作一个应用程序,我想定义一些多边形,我可以将悬停事件绑定(bind)到这些多边形以向图像添加注释。 我可以在 Flash 中正常创建这些,但我想加载一些外部数据、坐标列表,并使用 ActionScript 创建多边形。
显然它们只是热点,所以我希望它们不可见,但搜索我的问题仅显示使用 graphics
从坐标绘制多边形的结果movieclip
的属性.
数据永远不会改变,因此可以使用钢笔工具手动绘制所有多边形,但数据正在其他地方使用,因此如果我可以添加新区域,维护会容易得多只需更新文本文件即可。
最佳答案
var pointsRawXML:String = '<mypoints>\n<point x="100", y="100 />\n<point x="100", y="0 />\n<point x="0", y="0 />\n<point x="0", y="100 />\n</mypoints>';
会给你:
<mypoints>
<point x="100", y="100 />
<point x="100", y="0 />
<point x="0", y="0 />
<point x="0", y="100 />
</mypoints>
然后加载并解析它:
var points:XML = new XML(pointsRawXML);
var pointsXMLNodeList:XMLList = points.children();
var i:uint = 0;
var pointsVector<Point> polygonPoints = new Vector<Point>();
for(i = 0; i < pointsXMLNodeList.lenght(); ++i) {
var tmpXML:XML = XML(pointsXMLNodeList[i]);
var pX:Number = tmpXML.attribute("x") as Number;
var pY:Number = tmpXML.attribute("y") as Number;
var p:Point = Point(pX, pY);
polygonPoints.push(p);
}
现在您可以在 Sprite 的图形对象内绘制多边形:
//Note we can recycle the "i" variable
var polyContainerSprite:Sprite = new Sprite();
polyContainerSprite.graphics.beginFill(0, 1);
for(i = 0; i < pointsVector.length; ++i) {
if(i == 0) {
polyContainerSprite.graphics.moveTo(pointsVector[i].x, pointsVector[i].y);
}else {
polyContainerSprite.graphics.lineTo(pointsVector[i].x, pointsVector[i].y);
}
}
stage.addChild(polyContainerSprite);
类似的东西应该可以工作。请注意,所有代码都未经测试,自从我真正用 Flash 制作任何东西以来已经有大约一年了。哈哈,所以测试一下,如果您有任何问题/疑虑,请告诉我,我会帮助澄清。
另请注意,对于您需要的每个多边形/ Sprite ,您基本上需要将此代码调整为“循环”“n”次。另请注意,您可以将 XML 保存到文件中,然后只需使用 URLLoader 对象加载它们,然后将数据转换为 XML。
关于actionscript-3 - 在 ActionScript 3 中从一组坐标对创建多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479959/