« ケーススタディ[3] RotatoryClip(JP) | Main | embedFont(JP) »

ケーススタディ[4] SeekState(JP)

前回の記事で連続してフレームを正方向、逆方向に再生するクリップを制作に焦点を当てた。では、ある特定のフレーム(実際のプロジェクトでは特定のアンカーを押した時にドアの向き、正面の向きを表示する)の絵を見せたい場合にはどうしたらいいだろうか。その位置まで現在のフレーム位置からフレームを移動しなければならないわけだ。

シーク方向の問題
ここで問題となるのはどっちの向きに移動させればよいかということである。このシーク動作では正方向にのみ回転させるという条件にしてしまうと、例えば正面の1フレーム右の絵が現在表示していると、正面表示には約一回転しなければいけなくなってしまう。そこで実際表示したいフレームの番号と現在のフレーム番号から正方向と逆方向の再生どちらが移動数が少なくて済むかを計算した。

回転方向を決定する
シークしたい位置と現在の位置から単純に移動した場合の移動量がフレームの全体量の半分より超えなければよい。まず単純に移動した場合から移動方向を計算するその移動量が半分より超えていた場合は-1を掛けてその逆に再生する。

var dir = 0;
var rev = Math.abs(rtc._currentframe - frame) > Math.floor(rtc._totalframes / 2) ? -1 : 1;

if(frame == rtc._currentframe){
	dir = 0;
}else{
	if(frame < rtc._currentframe){
		dir = -1 * rev;
	}else{
		dir = 1 * rev;
	}
}

移動をする
endがターゲットとなるフレーム番号という違いがあるものの、RoundtripClipと全く同じである。

rtc.onEnterFrame = function(){
	var next:Number = this._currentframe + dir;
	var end:Number = frame;
	if(next < 1){
		next = this._totalframes;
	}else if(next > this._totalframes){
		next = 1;
	}
	this.gotoAndStop(next);
	if(next == end){
		delete this.onEnterFrame;
		stop();
	}
};

Post a comment