Toolkit for CreateJS & Haxe : シンボルの初期表示サイズ・位置情報取得 nominalBounds
CreateJS の Container クラスには width や height といったプロパティは用意されていません。なんとか width や height を取得する方法はないものかと調べてみたところ、「Toolkit for CreateJS 1.1」によって出力された javascript ファイル内の各 Container.nominalBounds プロパティを利用すれば、ある程度代用が効くことがわかりました。
nominalBounds プロパティ
Toolkit for CreateJS によって出力された javascript ファイルの内容を見てみると、以下の様な記述を目にします。
(lib.sample = function() { …略… }).prototype = p = new cjs.MovieClip(); p.nominalBounds = new cjs.Rectangle(0,20,550,360);
lib.sample.nominalBounds プロパティが lib.sample クラスの初期表示サイズ・位置情報となります。「初期」のデータという事で、スクリプトによってこの sample クラス内に何か別のシンボルが配置されたり 位置が移動したとしても nominalBounds の値が変わることはありません。
nominal の意味を調べてみると「わずかな」という意味のようですが、わずかながらでも大変助かる仕組みでありがたいです。素材データの画像の大きさに変更がかかったり、fla ファイル内シンボルの表示サイズを変更したりする際、逐一 haxe 側にて手動で表示サイズの数値変更を行う必要は無くなります。
注意事項としましては、仕様なのか不具合なのかはわかりませんが、Bitmap クラスに対しては以下の様な記述になってしまっており、lib.sample2 の表示サイズが取得できない状況となっています。
(lib.sample2 = function() { …略… }).prototype = new cjs.Bitmap(); //変数 p への代入が抜けている p.nominalBounds = new cjs.Rectangle(0,0,36,34);
今後の Toolkit for CreateJS のバージョンアップで改善されるかもしれません。
hexe での対応
nominalBounds プロパティは「Toolkit for CreateJS」によってダイナミックに Container クラスインスタンスに付与されたものであり、「CreateJS」でサポートしているプロパティではありません。
Container.hx 内に nominalBounds フィールド変数を定義してしまえばコンパイルが楽ではありますが、以下のように別途変換用クラスを設けて対応します。
package lib.toolkit_for_createjs.utils; import createjs.easeljs.Rectangle; class ContainerUtil { public static function getNominalBounds(container:Dynamic):Rectangle{ return container.nominalBounds; } }
生成した Container インスタンスを ContainerUtil.getNominalBounds メソッドの引数に指定する事により、Container インスタンスの初期表示サイズ・位置情報を取得できます。