くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

ゲームプログラミングのはなし20

【ゲームプログラミングのはなし20】
ちょっとオープンデータやらSpriteKitやらで思いっきり横道にそれてしまってましたが、はなしを戻します。前の「はなし14」の続きで覚えてないでしょうけども;

今回はアニメーションのはなしです。

アニメーションといっても、ゲームプログラミングでは特殊な方法があるワケではなく、基本は「パラパラマンガ」です。あらかじめちょっとづつ動いた絵を用意しておいて、高速で絵を差し替えることによって動いているように見せます。

問題は、どうやって絵を差し替えるのか、ということなのですが、ちょっとした準備と仕掛けが必要になります。

まず、絵を描画する準備として、画像ファイルを読み込み、その読み込んだメモリの位置を変数に保存しているハズなのですが、その変数を続き番号になるようにしておくと後でラクになります。例えば、剣を振るアニメーションで5枚の絵を使っていれば、draw[0]〜draw[4]というように。

次に、絵を切り替える時間をはかる変数を別途用意します。といっても、本気でタイマーできっちり計測するわけでもなく、適当に加算するだけで、一定の値になればもとにもどすカウンターの役割です。さっきの例で言えば、aという変数を0.1ずつ増やすようにすれば、10回加算すれば1になるので、draw[a]としておけば、それだけで絵がン秒毎に次々と切り替わってくれます。もちろん、4を越えたら0に戻すようにしておかないとヘンな絵が描画されたりエラーになったりしますが。

この加算を0.5にするか0.01にするかはさじ加減です。プレイしてみて、速いと思えば遅くすればいいですし。また、キチンとタイマーを使ってミリ秒毎に加算するほうがより丁寧です。さっきの方法だとプログラムを動かすマシンによってアニメーションの速度が変わってしまいますから。まあ、趣味のゲームではそこまで気にしなくてもいい場合がほとんどですけども。

あと、これはプログラミングあるあるなのですが、ひとつ数学の知恵をご披露しましょう。「循環数の作り方」をこのアニメーションで使います。
さっきの加算する変数から「5で割ったあまり」を使うようにすると、aは加算し続けるだけなのに、そのあとの「5で割ったあまり」の数は、
0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0 ...
と永久に循環し続け、アニメーションの絵を指定するのに都合がいいのです。いちいち4を超えたら0に戻す、という判定がいらなくなるのもスマートですし。C言語の記述はa%5です。「%」って、割り算した余りを出す記号なんですよ。(続く)

https://itunes.apple.com/jp/app/kumachanjanpu2/id789138227?mt=8&uo=4&at=10l8JW&ct=hatenablog