だれもが習ったであろう公式。
距離 = 速さ × 時間
1秒間だけに注目すると、
今の位置 - 1秒前の位置 = 今の速さ × 1(秒)
なので、左右を整理すると、
今の位置 = 今の速さ + 1秒前の位置
となります。こういうのを微分というんでした。
さて、onEnterFrameは
1秒に1回呼び出されるメソッドでした。ということは、この式をこのままonEnterFrameに書いてしまえば、そのムービークリップは、この式のとおりに動作するということです。
onEnterFrameは、この式を
積分してくれてるんですね。
等速直線運動
速さは一定ですから、次のようなクラスで等速直線運動ができあがりです。
class MyClip extends MovieClip{
var x_speed = 1;
function onEnterFrame(){
//今の位置=今の速さ+1秒前の位置
this._x = this.x_speed + this._x;
}
}
加速運動
これも簡単な公式。
速さ = 加速度(一定) × 時間
微分すると、
今の速さ - 1秒前の速さ = 加速度(一定) × 1(秒)
で、
今の速さ = 加速度(一定)+ 1秒前の速さ
ここまで考えたら、クラスに変換できそうです。
class MyClip extends MovieClip{
var y_speed = 0;//最初の速さ
var y_accel = 1;//加速度
function onEnterFrame(){
//今の速さ=加速度+1秒前の速さ
this.y_speed = this.y_accel + this.y_speed;
//今の位置=今の速さ+1秒前の位置
this._y = this.y_speed + this._y;
}
}
横(X方向)に等速運動、縦(Y方向)に加速運動、で、放物運動になります。ActionScriptではよくある題材です。
壁にぶつかったら、速さを反転してます。
if( this._x <= 0 || this._x >=200 )
this.x_speed = -this.x_speed;
理屈さえわかれば、いろいろと応用が利きそうです。
中学高校の教科書をひっぱりだして、試してみてはいかがでしょう。