FlashToHaxeConverter 3.2.2 バグ修正・他 jsfl Instance オブジェクトに関して
Flash ライブラリ内の構造をそのまま Haxe extern ファイルに出力を行う、FlashToHaxeConverter のバグ修正を行いました。
https://github.com/siratama/Flash-To-Haxe-Converter
主な修正内容は以下となります。
・ガイドレイヤーを無視するよう修正
・レイヤーがロックされている、あるいは非表示の場合エラーが発生していた不具合を修正
・ライブラリフォルダ構造ではなくリンケージ設定を元にファイル出力を行うよう変更
・ステージ上に配置されているリンケージ設定を行なった MovieClip への出力対応
ライブラリフォルダ構造ではなくリンケージ設定を元にファイル出力を行うよう変更
今まではライブラリフォルダ構造を元にファイル出力を行なっていたため、ライブラリフォルダ構造とリンケージ設定構造が異なる場合、意図しないファイル出力が行われてしまう問題がありました。
今回の修正では、リンケージ設定を元にファイル出力が行われるようになったため、自由なライブラリフィルダ構造設計が可能になります。
ステージ上に配置されているリンケージ設定を行なった MovieClip への出力対応
今までステージ上に配置されていた MovieClip は、リンケージ設定がされていようと MovieClip として出力していました。しかしそれが原因で、動的に swf を読み込むと強制型変換エラーが発生したため、対処を行いました。
ステージ上に配置されている MovieClip からはリンケージ名は取得できないものかと思っていましたが、そんな事はなく、Layer オブジェクトから取得可能な Element オブジェクトの elementType が "instance" の場合、Element オブジェクトは Instance オブジェクトとして扱うことが可能な事がわかりました。
Instance オブジェクトの概要
http://help.adobe.com/ja_JP/flash/cs/extend/WSd6d4f896b3a8801b68f3c0d913cb56242ea-8000.html
この Instance オブジェクトは libraryItem というプロパティを持ち、そこからリンケージ名の取得が可能となります。
以下は Layer オブジェクトインスタンスから ステージ上に配置されている MovieClip のリンケージ名を取得するまでの流れとなります。Haxe で記述しています。
var layers:Array<Layer> = Flash.getDocumentDOM().getTimeline().layers; for(layer in layers){ for(element in layer.frames[0].elements){ if(element.elementType == "instance"){ var linkageClassName = untyped element.libraryItem.linkageClassName; } } }
untyped を利用しているのは、element を Instance オブジェクトに cast しようとしてもコンパイルエラーが発生してしまったためとなり、暫定的にエラーを回避させています。きちんと変換する方法はありそうです。
[ FLASH ] [ tips ] [ update ] 投稿者 siratama : 2013年07月18日 11:22