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

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

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

【ゲームプログラミングのはなし6】
画像の描画であとひとつ大事な処理が残っているといいました。それは再描画のタイミング調整です。

なんのことかというと、前回、画像を動かして見えるようにするためには一度その画像を消さなければいけないと説明しましたが、正直にそのまま実行すると、キャラクターが消えて、現れて、消えて、現れて、と高速で点滅しまくってまともなゲームにならないんです。そりゃそうですよね、一回描画した画像を消しているのですから。

ではどうすればいいのか?

解決法は、「消しているところを見せなければいい」のです。

つまり、消さなければいけない画像を消して、次に移動した位置で画像を全部描き終わってから、ニンゲンの目に見える状態にするのです。

そんなことができるの?と思うでしょうが、これができちゃうんですね〜。さっきから画像を描画、描画と言っていますが、私たちニンゲンにとっては画像を描画する「画面」は今この目の前にあるディスプレイしかないと考えてしまいますが、コンピュータにとっては画像を描画する先はメモリの中でいいわけなのです。要は、一画面分のピクセルの色データを持てばいいので、メモリの中でもう一つの画面を持ってると考えればいいのですね。で、そっちに先に画像の描画を始めておいて、完成したらニンゲンが見ている「画面」に一画面分をまるまる転送します。そして、ニンゲンの目に触れない裏画面では画像を全部消すところから始めて、えっちらおっちらと背景やらキャラクターやらを描画していく...

という仕組みであれば、結果、消しているところが見えなくて、チラつきを防ぐことができます。2画面分をメモリに保持することから「ダブルバッファリング」と言ったりしますが、今ではプログラマーに意識させないように自動的に処理されるようになってきていますね。

ゲームで「画面がカクつく」というのは、この再描画が追いついていない時に起こります。描画処理が多すぎて、次の転送に間に合わない時に飛ばすので、スローになったり、飛び飛びになったりします。昔はアーケードのシューティングや、今では漫画「87クロッカーズ」でのフロップスで見られますね。(続く)

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