Flash / AS3 - 如何获取在Flash中绘制路径的点数

3

在Flash中,是否可以绘制路径并从AS中访问点?

例如,如果我有一张地图,并在各个道路上添加了隐藏的路径,我随后想要通过代码沿着这些预定义的路径动画交通或生长线。


好问题 - 但我不知道有什么方法可以做到这一点。很乐意被证明是错误的。 - Bosworth99
4个回答

0

你可能认为在世界领先的18岁的可编程矢量绘图应用程序中可以合理地期望这一点,但你会错的。

您可以通过沿着路径缓动影片剪辑来获得所需的效果,例如使用动画工具(GUI)在100帧上,然后通过AS3控制影片剪辑的内容和动画的播放。

否则,您需要在Illustrator或等效软件中绘制路径,通过(例如)SVG导出数据并导入数据。只要您实际上不需要绘制路径,这将起作用,因为显然,AS3只能绘制二次贝塞尔曲线,而Illustrator只能绘制/导出三次贝塞尔曲线。


呵呵。我不会将其作为答案点赞,但如果SO有Google +1或Facebook喜欢(尽管我很感激它没有),我会给其中之一。 - Lars Blåsjö

0
你可以创建一个Point对象的数组,将路径上所有检查点都保存在其中。当你需要漂亮地展示你的路径时,只需要逐行绘制:从点1到点2的线,从点2到点3的线等等。最好在一些独立的Sprite上进行操作,放置在地图对象之上,这样以后就可以很容易地从舞台中删除它。
通过这种方式,你可以为每条路径设置点数组。唯一困难的部分在于创建所有这些数组。

-1,这根本不切实际。所以你要测量每个坐标并将其写入代码作为路径数组中的条目?如果需要修改路径的某些部分怎么办?重新执行整个过程吗? - bummzack
实用性取决于他需要多少个点来充分描述路径。对于一小部分点来说,这仍然是合理的。但是,如果有大量点,则会出现问题;我同意这一点。在那种情况下,如果用户有雄心壮志,他们可以创建自己的绘图应用程序来管理这些点。 - meddlingwithfire
@bummzack 很同意这不是最好的方法。但是,我不想在代码中存储所有坐标,我考虑使用数据库,调用服务器,获取带有坐标的xml,将它们放入数组中,然后绘制。当然,还应该有一个后台工具来编辑坐标。如果您需要存储大量数据,我认为数据库部分是非常明显的。 - Igor Milla

0

我从未尝试过,但技术上使用像as3swf这样的库应该是可能的,它是用ActionScript编写的SWF解析器。

您需要使用解析器库来解析包含路径的SWF,然后从输出中提取所需的坐标。

不过,这个过程对我来说似乎非常反向。一个更简单、更可行的方法是在Flash中绘制路径,选择它们并使用以下方式导出:文件 > 导出 > 导出所选内容...,然后导出为Adobe FXG。这将把您的路径导出为FXG XML文件。

然后,您可以在Flash中解析FXG文件并提取您感兴趣的路径坐标。应该很容易实现。还要查看Path class docs,因为它包含了一些有关坐标存储和解释的信息。


这两种方法的问题在于,您正在加载文件,然后在不生成输出的情况下对它们进行处理。为了使用它们,您必须再次处理它们,并在屏幕上显示结果。有没有一种方法可以获取Sprite的路径信息或从*已创建的Sprite实例中提取drawPathData? - iND
@iND 很遗憾,这是不可能的。唯一的方法是反过来思考..例如,有数据并使用该数据绘制路径。拥有路径不能让您获得数据。 - bummzack

0
如果您事先知道路径中的点,可以将它们存储在数组或向量中,并手动处理绘图。请查看Graphics类以获取绘图方法。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html
如果您不想这样做,可以应用一些代码技巧来为您完成工作。一种可能的方法是,如果您知道起始点:使用特定颜色(例如0x00ff0000,完全透明的红色)在Shape上绘制隐藏路径。然后将您的Shape绘制到BitmapData实例中。每帧,使用BitmapData的getPixel方法查找当前位置相邻且尚未移动到的完全透明的红色像素,然后移动到该点。请注意,此技术不支持交叉点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接