CreateJS & Haxe : MovieClip.hx, Timeline.hx, Point.hx 修正・処理追加
後々の CreateJS と Haxe 側のアップデートで解決される問題となりますが、現段階での利用者側としての対応を記述。
createjs.easeljs.MovieClip.hx
FDT の Haxe エディタにて CreateJS 用プログラミングをしていたところ、createjs.easeljs.MovieClip の記述を行った段階でコンパイルエラーが発生しました。エディタのバグだろうかと調べてみたところ、ちょうど何日か前に Haxe 用 createjs.easeljs.MovieClip.hx のバグ修正が行われていた模様。
以下の MovieClip.hx と差し替えることで正常に動作するようになりました。
https://github.com/nickalie/CreateJS-Haxe/blob/master/createjs/easeljs/MovieClip.hx
createjs.tweenjs.Timeline.hx
上記 URL でも公開されている Haxe 用 createjs.tweenjs.Timeline.hx クラスはどうやら最新の API に対応していないようで、以下のものに変更を行いました。プロパティとメソッドを公式の API 通り追加しただけとなります。
package createjs.tweenjs; @:native("createjs.Timeline") extern class Timeline { public var duration:Int; public var ignoreGlobalPause:Bool; public var loop:Bool; public var onChange:Dynamic; public var position:Dynamic; public function new(tweens:Array<Tween>, labels:Array<String>, props:Dynamic):Void; public function addLabel(label:String, position:Int):Void; public function addTween(tween:Tween):Void; public function gotoAndPlay(positionOrLabel:Dynamic):Void; public function gotoAndStop(positionOrLabel:Dynamic):Void; public function removeTween(tween:Tween):Void; public function resolve(positionOrLabel:Dynamic):Int; public function setPaused(value:Bool):Void; public function setPosition(value:Int, actionsMode:Dynamic):Void; public function tick(delta:Int):Void; public function toString():String; public function updateDuration():Void; }
参考) 公式 Timeline クラスのAPI
http://createjs.com/Docs/TweenJS/Timeline.html
Action Script 3.0 で利用可能な MovieClip.currentFrameLabel 機能は Createjs の MovieClip には現在ありませんが、MovieClip.timeline.resolve メソッドを利用する事で解決できます。
createjs.easeljs.Point.hx
Action Script 3.0 の Point クラスに用意されている各メソッドを CreateJS でも利用するため、以下のサイトで公開されているソースを Haxe 用に移植させていただきました。
EaselJSのPointクラスをFlashライクに拡張しよう | kudox.jp
http://kudox.jp/java-script/createjs-point-extended
createjs.easeljs.Point クラスを拡張した lib.utils.PointUtil クラス
package lib.utils; import createjs.easeljs.Point; class PointUtil extends Point{ public function getLength(){ return Math.sqrt(x * x + y * y); } public function add(v:PointUtil){ return new PointUtil(x + v.x, y + v.y); } public function subtract(v:PointUtil){ return new PointUtil(x - v.x, y - v.y); } public function equals(toCompare:PointUtil){ return x == toCompare.x && y == toCompare.y; } public function normalize(thickness:Float){ var length = getLength(); if(length == 0 || thickness == 0){ x = 0; y = 0; } else{ var scale = thickness / length; x *= scale; y *= scale; } } public function offset(dx:Float, dy:Float){ x += dx; y += dy; } public static function distance(pt1:PointUtil, pt2:PointUtil){ return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); } public static function interpolate(pt1:PointUtil, pt2:PointUtil, f:Float){ return new PointUtil((pt1.x - pt2.x) * f + pt2.x, (pt1.y - pt2.y) * f + pt2.y); } public static function polar(len:Float, angle:Float){ return new PointUtil(Math.cos(angle) * len, Math.sin(angle) * len); } }
上記 URL でも公開されている Haxe 用 createjs.tweenjs.Timeline.hx クラスはどうやら最新の API に対応していないようで、以下のものに変更を行いました。プロパティとメソッドを公式の API 通り追加しただけとなります。
追記)
Haxe Code Snippets の項に PointUtils クラスがすでにありました。
http://haxe.org/doc/snip/pointmanipulation