onEnterFrameで時間積分

ちょっとだけ数学。これくらいを理解してれば、いろんな数式をFlashアニメーションにできます。

だれもが習ったであろう公式。


 距離 = 速さ × 時間

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;

理屈さえわかれば、いろいろと応用が利きそうです。
中学高校の教科書をひっぱりだして、試してみてはいかがでしょう。


コメント

コメントしてください

closed.