この記事のURL

http://www.dango-itimi.com/blog/archives/2013/001193.html


FLASH tips update 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

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1153

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]