Animate/Flashで使えるJSFLをHaxeで書く


これは、FLASHer その2 Advent Calendar 2016 の記事です。

JSFLとは

JSFLとは、Animate CC(または、Flash Pro)のJavaScript APIをつかってツール上の様々な操作をできるスクリプトです。

単純作業の自動化などに使えます。

JSFLの事例

JSFLを使うと例えば以下のようなことができます。

現在開いているドキュメントのディレクトリを開く.jsfl
空フォルダを削除する君.jsfl
ビットマップからナインスライスMCを生成.jsfl

Haxeとは

HaxeはActionScript3に似た言語で、swf、ActionScript3、JavaScript、C#、Java、C++、Python、PHP、Luaという複数のプラットフォームに出力可能な言語です。

詳しくは、https://ja.wikipedia.org/wiki/Haxe を見てください。

Haxe/JSFLの第一歩

Haxeをインストールしたら、以下のコマンドを入力して、haxe-jsflをインストールします。

haxelib git haxe-jsfl https://github.com/tmskst/haxe-jsfl.git

haxe-jsfl は、JSFLのAPIの型情報などをまとめたライブラリです。

次に、Haxeのコンパイル用にbuild.hxmlを用意します。

build.hxml
# JavaScriptターゲットで出力
-js bin/output.jsfl 

# 型情報のライブラリを指定 
-lib haxe-jsfl:git 

# Haxeのソースコードを置くディレクトリの指定
-cp src

# メインクラスの指定
-main Main

そして、以下のようなHaxeファイルを準備します

src/Main.hx
class Main {    
    static function main() {
        trace("Hello JSFL");
    }
}

これを以下のコマンドでコンパイルします。

haxe build.hxml

これで、生成されたoutput.jsflをFlashにドラッグ&ドロップすると、Hello JSFLと表示されるはずです。

Haxeで書くことのメリット

入力補完が効く

JSFLの仕様は http://help.adobe.com/ja_JP/flash/cs/extend/flash_extending_reference.pdf に書かれていますが、いちいちこれを読み返しながら作業するのは面倒です。

Haxeで書けば、これらの関数についての補完が効くのでドキュメントを見返す関数も少なくて済みます。

JSONの読み書きが楽

Haxeの標準ライブラリでは、Haxeで実装されているJSONパーサ/プリンタと、ブラウザ側のJSON APIの両方が利用可能です。

JSFLからはブラウザが提供しるJSON APIは使えませんが、Haxeではコンパイル時に-D haxeJSONのオプションを指定することで、Haxeのコードで使用されているJSONパーサ/プリンタが使用されるようになります。

これを使うことで、簡単にJSFLでJSONをあつかうことができます。

簡単なActionScriptならパースできる

JSFLではflaファイル内で使用しているActionScriptにアクセス可能ですが、JavaScriptのコードでここから情報を読み取ろうとすると大変です。

Haxeには、Haxeのコードをパースするライブラリがいくつかあります。

haxeparser
hscript

Haxeの文法とActionScript3の文法はよく似ていますから、HaxeとActionScript3で差が出ないようなコードであればこれらのライブラリでパースすることができます。

Haxeのプログラムとの連携が楽

JSONとして出力する場合、そのスキーマ情報をtypedef として定義しておくことで出力側と読み込み側で型情報を共有してあつかえます。

また、Haxeの独自シリアライザを使うことで、Haxe/JSFLで作ったhaxeのオブジェクトをそのまま文字列化して、他のプログラムに持ち運ぶことができます。

HaxeでJSFLの事例

選択したライブラリ内アイテムを一括で複製する
LibraryItemDuplication

各ビットマップデータに対し一括で、 画質を Lossless(PNG/GIF)化し スムージングを OFF にする JSFL
BitmapSmoothCut

Flash CC 内構造を Haxe クラスに出力する
Flash-To-Haxe-Converter


以上です。