Flash插件编写体验

做游戏开发,少不了工具。以前一说起工具,少不了上面MFC、QT、WPF啥的。做出来的工具好不好用且不说,光是要美术和程序习惯都是个问题。

以前做过一款将SWF转换成程序动画文件的方式。初衷是想无缝连接美术和程序的工作流程。但是由于SWF文件本身比较复杂,而且多数是矢量的图形,在工具里面难处理。所以最终工具没有得到应用。

后来发现DragonBones可以让美术直接在Flash里面制作2D骨骼动画,然后输出JSON和texture atlas。这是一个非常好的做法,美术根本不用熟悉其他工具了,而且直接导出程序使用的数据格式。

DragonBones虽然很不错,但是没有我需要的场景制作的功能。所以我决定自己写一个Flash插件。

准备

Flash插件接口

Flash的插件API使用的javascript接口。

其层次结构简单描述是这样的:

flash(fl)
    ->docuement
        ->timeline(场景)
    ->library
        ->items
            ->timeline
timeline
    ->layer
        ->frame
            ->element

其中,在文档对象下的timeline就是场景,在library下面的timeline就是元件。

有了上面等结构之后,你就可以轻松的看《Extending ADOBE® FLASH® PROFESSIONAL

有用的东西

xJSFL是一个开源的Flash插件快速开发框架。这次我的工具没有太复杂的东西,所以最终只使用了里面的JSON代码。

在Flash CS6以上,提供了SpriteSheetExporter用于将元件打包成texture atlas。所以,如果你需要texture atlas的话,就可以不用自己手写MaxRects之类等2D打包算法了。

陷阱

  • jsfl文件要保存成带BOM带UTF-8,才能在Flash中显示中文。
  • Flash CS5、Flash CS6有bug,无法显示异常的错误信息。
  • Docuement.timelines中的场景可以用index和名字访问,遍历的时候应该使用for (var i = 0; i < doc.timelines.lenght; i++)
  • SpriteSheetExporter输出的JSON文件是UTF16的,你可将exportSpriteSheet()第三个参数设置为false,然后自己将其返回的字符串用FLfile.write()写到文件。