この記事のURL

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


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

[ FLASH ] [ tips ] 投稿者 siratama : 2013年01月17日 19:21

トラックバック

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

コメント

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




[EDIT]