今時は、色々なプログラムで物理シミュレーターのライブラリーが使えるようになって、物が衝突したり、転がったり、重なったり、とリアルな動きをするゲームがたくさん出て来たなと思います。
ですので、物理シミュレーターがなければ、そういった動きを作るのは無理、と思ってしまう人も多くいるのではないかなと思います。
ところが実は、バネの法則だけを知っていれば、結構リアルなシミュレーションができてしまうのです。
バネの法則とは、
力 = バネ定数 × バネの伸び
という、伸びれば伸びるほど力は強くなる、という結構当たり前っぽい法則です。
この法則を使って、Scratchでボールの衝突を再現したのがこの動画です。一番単純なx軸方向での衝突です。
やっていることは以下の通りです。
1. ボールが何にも触れていない場合には、速度dxは変化しない。毎ステップごと、ボールのx座標にdxを足す。
2. ボールが障害物に触れると、障害物との距離に比例した力fがかかり、その分だけ速度dxが変化する。x座標は、dx分変化する。
簡単にするために、ボールの重さと時間ステップは1にしていると思ってください。
さて、Scratchでの実装です。直径が100くらいの円のスプライトを作り、ボール0とボール1とします。
まず、ボール0のプログラムです。下の変数を作ります。全体から見える変数にし、拡張を考えてボール番号0を変数名に着けています。画面に出したい変数にチェックを入れています。
メインのプログラムは、以下のような流れになります。
1. ball0_initで変数とボールの位置を初期化
2. ball0_updateで速度と座標を更新
3. ball0_forceでボール0にかかる力を計算
4. 2と3を繰り返す
ボール1は動かさないのでこれだけです。
これだけで動くはずです。作ってみて上手くいかないようでしたら、以下からプログラムが見れますので動かしてみて下さい。
さあ、これさえ押さえておけば、いろんなことができますよ。