as3_movieclipを動かす(減速イージング+慣性)

慣性がついてゴムで引っ張られたように戻って止まる移動。
前回の減速イージングほど使う頻度は多くないですけど知っておくと便利

基本は減速イージングと似ていますが、違いは”止まりにくい”という点です。
スピードが速ければ速いほど止まりにくい
を再現するための計算は下記のような感じで書けます。

動かしたいMC座標 +=( 目的地座標 – 動かしたいMC座標 ) * 減速係数 + 前回の移動距離 * 慣性に関わる係数

前半部分までは、減速イージングと同じです。
違いは後ろの「前回の移動距離 * 慣性に関わる係数」が今回追加している式です。
例えば前回100移動していて係数が0.3とかなら30足されます。
前回多く移動(スピードが速い)していればしているほど、目的値を余計に移動してしまうので止まりにくくなって。移動距離によっては目的値を通り過ぎてしまうこともあります。

コードで書くとこんな感じ。
(toxとtoyは目的地がはいってるものとします)

var a:Number = 0.15;
var b:Number = 0.7;
	
lastx = ( tox - event.target.x)*a +  lastx*b ;
event.target.x += lastx;
lasty = ( toy - event.target.y)*a + lasty*b;
event.target.y += lasty;     

このサンプルは、1.5秒置きにランダムな目的値に向かってます。

↑のサンプルのソースコードはこんな感じです。

ball.addEventListener( Event.ENTER_FRAME, scrollbana );
var lastx:Number=0;
var lasty:Number=0;

function scrollbana( event:Event ):void{
	var a:Number = 0.2;
	var b:Number = 0.8;
	lastx = ( int(tox.text) - event.target.x)*a +  lastx*b ;
	event.target.x += lastx;
	lasty = (  int(toy.text)  - event.target.y)*a + lasty*b;
	event.target.y += lasty; 
}


var movtimer:Timer = new Timer(1500);
movtimer.addEventListener(TimerEvent.TIMER, timefunc);
movtimer.start();	

function timefunc(evt:TimerEvent){
	var rx = int(Math.random()*640);
	tox.text = rx.toString();
	var ry = int(Math.random()*100);
	toy.text = ry.toString();
}

マウスカーソルに追従するアニメとかで良くみかけます。



Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)

Post a comment.