この記事のURL

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


FLASH tips update FlashToHaxeConverter アップデート: OpenFL・swf動的読み込み・IDE補完用出力

Flash ライブラリ内の構造をそのまま Haxe extern ファイルに出力を行う、FlashToHaxeConverter のアップデートを行いました。

https://github.com/siratama/Flash-To-Haxe-Converter

新規機能は以下となります。

・OpenFL 用 hx ファイル出力
・swf 動的ロード用 hx ファイル出力
・リンケージ設定の無い MovieClip 内プロパティへの IDE 補完用処理出力

出力用ダイアログは以下のようになりました。今までの flash 用出力は「flash(extern)」欄となり、swf 動的ロード用 hx ファイル出力は「flash」欄が対応しています。

OpenFL に対応した新しい制作の流れの図は以下となります。

OpenFL に対応したとはいえ OpenFL 自体に制限事項が多く、出力された hx ファイルを利用しても null がかえってくるものもあります。ビットマップ関連 hx ファイルがそれにあたります。OpenFL 出力機能はまだ α版だとお考えください。詳しくは FlashToHaxeConverter のページをご参考ください。

リンケージ設定を行なっていない MovieClip 内プロパティへの IDE 補完用処理出力

こちらに書かれている内容を参考に、IDE 補完用出力を行うようにしています。

 http://qiita.com/tail_y/items/9d7f8cf903613c1037e6

これにより MovieClip がどれだけ入れ子構造になろうとも、補完機能を持つ IDE ならば、深い階層へのプロパティへのアクセスが容易となります。

例えば以下は、リンケージ設定を行なっているのは View クラスのみとなりますが、内部に配置している MovieClip や TextField への補完が行われます。

var view = new View();
view.circleMC.cardA.numberData.x = 50;
view.circleMC.cardB.blackMC.numberText.text = "testText";

今までの Flash 開発では無かった機能かと思われるため、今後 Flash オーサリングに関して新たな手法を編み出す事が可能になるかもしれません。

OpenFL 入力補完用出力詳細

OpenFL 用出力に関しましては、abstract を数珠つなぎにするようにして補完機能を実現させています。例えば以下の様な構造を持つ game.View クラスがあったとします。

View.circleMC.memoText
View.circleMC.cardSetMC.cardA
View.circleMC.cardSetMC.cardB

circleMC ムービークリップ内には memoText という TextField と cardSetMC というムービークリップを配置しており、cardSetMC 内には cardA と cardB というムービークリップを配置しています。

これを OpenFL 向けに出力を行うと以下の様なファイルが展開されます。

package game;

import flash.display.MovieClip;
import openfl.Assets;

abstract View(MovieClip){
	public function new()
		this = Assets.getMovieClip('test:game.View');
	@:to public function getInstance():MovieClip
		return this;

	public var circleMC(get, never):View_circleMC;
	function get_circleMC(){
		return new View_circleMC(cast this.getChildByName('circleMC'));
	}
}
abstract View_circleMC(MovieClip){
	public function new(mc:MovieClip)
		this = mc;
	@:to public function getInstance():MovieClip
		return this;

	public var memoText(get, never):flash.text.TextField;
	function get_memoText(){
		return cast(this.getChildByName('memoText'), flash.text.TextField);
	}
	public var cardSetMC(get, never):View_circleMC_cardSetMC;
	function get_cardSetMC(){
		return new View_circleMC_cardSetMC(cast this.getChildByName('cardSetMC'));
	}
}
abstract View_circleMC_cardSetMC(MovieClip){
	public function new(mc:MovieClip)
		this = mc;
	@:to public function getInstance():MovieClip
		return this;

	public var cardA(get, never):flash.display.MovieClip;
	function get_cardA(){
		return cast(this.getChildByName('cardA'), flash.display.MovieClip);
	}

	public var cardB(get, never):flash.display.MovieClip;
	function get_cardB(){
		return cast(this.getChildByName('cardB'), flash.display.MovieClip);
	}
}

その他

JSFL にて、ステージ上に配置されたシンボルが リンケージ設定をされている MovieClip であるかどうかを判別する方法は見つかりませんでした。よって、ステージ上に配置されている MovieClip にリンケージ設定が行われていようと、ただの MovieClip として出力されます。しかし今回の IDE 補完機能により、その欠点は克服されたかと思います。

[ FLASH ] [ tips ] [ update ] 投稿者 siratama : 2013年07月10日 13:22

トラックバック

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

コメント

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




[EDIT]