我们有一个 Flash 应用程序,我们计划将其转换为 javascript。这是一个非常简单的地图应用程序,以图像为背景和一堆简单的多边形影片剪辑,代表地图上的目的地。
我想遍历每个影片剪辑并将形状提取到 x,y 点数组中,以使用外部 javascript 函数重绘多边形。
使用动作脚本可以做到这一点吗?
我们有一个 Flash 应用程序,我们计划将其转换为 javascript。这是一个非常简单的地图应用程序,以图像为背景和一堆简单的多边形影片剪辑,代表地图上的目的地。
我想遍历每个影片剪辑并将形状提取到 x,y 点数组中,以使用外部 javascript 函数重绘多边形。
使用动作脚本可以做到这一点吗?
如果您想在作者时导出形状坐标,您可以尝试@strille 或这个推荐的 JSFL 脚本或导出透明图像(如果这对您的应用程序来说不是太限制的话)。
如果您需要在运行时导出形状,可以使用很棒的as3swf库来反编译 swf 并导出形状。看看ShapeExport wiki,因为有几个方便的 js 导出器,比如JSCanvasShapeExporter和更通用的JSONShapeExporter
Flash Player 11.6 引入了readGraphicsData(),它完全符合您的要求。
如果您需要针对早期版本,那么不幸的是,没有简单的方法可以在运行时使用 ActionScript 从显示对象中读取形状坐标。
如果您只想在有人为 Flash CS3 编写了一个 jsfl 脚本后提取形状坐标,看起来它可能会帮助您。
您可以通过多种方式从 SWF 中读取坐标。例如,我用 PHP (链接) 编写了一个解析器。事实证明,获取数据并没有帮助。Flash 绘画模型与 HTML5 的不同之处足以使传输变得异常困难。我发现的主要障碍是,在 Flash 中,可以使用两种填充样式填充路径:一种用于路径包围的区域,另一种用于被奇偶规则视为“外部”的封闭区域(例如,五边形一颗星星的中间)。由于 HTML5 画布只允许您指定一种填充样式,因此您无法从 Flash 中准确地重绘形状。我试图创建一个将形状提取为 SVG 的工具,结果中出现了很多间隙和漏洞。