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


