前回は絵柄を変えるアニメーションの話しをしました。次は移動のアニメーションの話しをしましょう。
時間とともにモノの位置が変わるというのは動きの基本です。ゲームを形作るプログラムの骨格が,一定時間(例えば1/30秒)ごとに画面を書き換えるようなループになっている場合,毎回の描画タイミングごとに一定量だけ動かせば,等速直線運動になります。繰返しごとに,例えば,板のx座標を1増やし,y座標を1増やすと板は等速直線運動します。
x=x+1;
y=y+1;
この1と書いたところを両方とも2にすれば倍の速度になります。このx座標とy座標の変化量を様々な数で組み合わせると様々な方向に移動します。ある領域を設定して移動量を正負逆転すれば往復運動をしたりします。
ただ,シンプルなのはこれまでで,重力を考慮した移動や,ぐるぐる回るような移動は,少し,物理の知識が要ります。ただ,簡単な2Dアクションゲームの場合は,何コマ分かの移動を表にしてそれを参照することで運動を実現するということが行われます。例えば,20フレームで必ず画面から出てしまうような移動ならば,x座標とy座標を20個分記憶する配列を用意してそこにあらかじめ計算しておいた数値を記憶しておき,ゲーム中に参照すればよいわけです。
3Dになってからは質点の運動学の知識が必要になるのですが,一度物理的な意味をきちんと理解したうえで,パターン化してしまえばなんとかなると思います。物理のシミュレーションはつきつめると
・位置の時間的変化が速度
・速度の時間的変化が加速度
であり,ゲームループでは
・加速度から速度を計算し,
・速度から位置を計算する
ということを繰り返す,ということさえ知っていればよいのです。例えば,等加速度運動は1次元の運動であれば
v=v+1;
x=x+v;
というようなものです。繰り返すごと速度に相当するvが一定の値1だけ増えます。
…今回は少し,あるいはかなり難しかったかもしれませんね。でも,アクション系のゲームを作るときは同じ原理で出来るのでがんばってみてください。