これらのVelocityをXY座標にあてはめていくのがFlashアニメーションの基本であるとした。
また、角速度からXY速度への変換の例では、度をラジアンに変換するコードから、Math.cosをXに,Math.sinをYに当てはめるといってた、三角関数を用いた基礎的なコードを紹介。
スピードに角度を自在に操ることで、柔軟性を得ることが出来るとした。
次に、スピードを変えたい場合のルールとして、Acceleration(加速)が紹介された。オブジェクトの移動スピードを上げたい場合にはもちろんのこと「スピードを落とす場合にもAccelerationと読んでいる」と述べた。Accelerationのシンプルなコードは以下のようになる。この例では、ボールがだんだん加速しながら移動していく。
基本的な考え方として"加速を速度に追加させ、速度を位置に追加させる"と述べるキース氏。常に、Velocityに対してルールを加えていくという。また、加速の延長として、Gravity(重力)を紹介。Gravityはy軸方向のみの加速として定義される。これは、地球が常に同じ方向に物体をひっぱいてる事と同じだ。氏はコード自体は加速とほぼ変わらないとし、オブジェクトが落ちていくデモを見せた。Velocityの初期値をマイナス値にすることで、最初は上昇するものの、重力に引っ張られて落ちていくといった表現や、Gravityを極端に低くすると言ったパラメータのちょっとした変動で表現の幅が広がり、リアルになることを示した。氏は、「とはいえ、これは物理の教科書に書いてあることとは違う。つまり、完全な精度はない。だが、ゲームやアプリケーションに使うには十分だ。短時間で、短いコードで表現することが出来る。精度をだそうとすれば、その分負荷が掛かり、コードも複雑になる。」として、必ずしも精度の高いアルゴリズムを利用する必要がないことをアドバイス。
キース氏は、「ここまでのサンプルでは、ステージの端まできたら消えてしまっていた。これではつまらない。"環境に対してオブジェクトがどう反応するか"について、考えてみよう」として、Bouncing(弾性)を解説。このデモでは、ステージの端にオブジェクトが当たった時に跳ね返るといった例を紹介。「ボールがステージの端当たったかどうかを判定するには、ボールの位置と半径が、ステージの端とどういう関係にあるかを考える」とし、コードを提示。ボールが端を超えた場合、ボールの位置をステージ端からボールの半径を差し引いた分まで押し戻し、Velocityに-1を乗算すれば方向を反転することができ、弾性を再現できる。また、Friction(抵抗・摩擦)の解説では、"常に速度に対して逆方向に働く力"として、「摩擦は速度を超える力ではならない」と述べ、よく使われるシンプルな抵抗処理として、Velocityに対して0.9あたりを乗算する方法を紹介した。
氏は、「ここまではルールを当てはめていくだけのシンプルなものだ」として、次にインタラクションを加えた表現として、マウスを使ってボールを投げるデモを解説。addEventListenerを使用して、ドラッグアンドドロップを実装。ドラッグ中かどうかを判断するプロパティを定義した。ボールが実際に落ちるEnterFrame内では、ドラッグ中でなければ今まで同様落下の処理を、ドラッグ中であれば、ボールの座標をセーブし、Velocityに対してボールの現在座標と、前回セーブした座標の差を割り当てることで、ボールを投げるといった表現ができるようになった。
この他に、イージングと、それを応用したバネについての考え方について解説した。イージングでは複雑な方程式が必要になるとし、ライブラリを使用するのがよいという。その一部として、Tween , Tweener , gTween , TweenLite ,TweenMax を紹介した。バネの表現では、"力は伸びに比例する" のフックの法則を紹介。"バネ定数*距離"の方程式を利用した、デモを行った。
このセッションでは、基礎的ながら、わかりやすく実践的なアニメーションについて学ぶことが出来た。こうした現実世界に存在する様々な法則をルールとして当てはめることで、よりリアルな表現が可能になる。現在キース氏の著書『Adovanced ActionScript3.0 Animation』の邦訳が進行中とのことで、今から楽しみだ。