ゲームのポーズの処理

ちょっとGBAプログラミング界隈を見ていたらそんな話題があったので、
つらつら書き。

元々ラインバッファしかないハードは描画は「画面を描画していない期間」にしかできず、
通称「VBlank」に描いたり(or書いたり)する。(GBAならOAMに転送or登録しにいったりする)

要するにハード様が一生懸命描画を行っている裏で通常の処理をするのであり、
そのユニット描画をするかどうかを定めるのは「画面を描画していない期間」にしか定まらないので、

hogeSprite.draw();

とかで「描く」と見せかけておいて、
中では単に描画リストに追加しておき、
VBlankがやってきたらそのリストを手繰って表示情報を組み立て、
がしがし描画する。


「ポーズがかかったらアニメが止まる」、
という処理も「画面を描画していない期間」にポーズ状態か否かを見て、
hogeSprite.patternIncrement(); // アニメーションパターンを1フレーム進める
を呼ぶか否かをすれば良い。

すべてのアニメを止めることができないのは、
ポーズ中に「アニメをするスプライト」と「アニメをしないスプライト」が存在する訳で、
それを理解しているプログラマが呼ぶか呼ばないかを選んだりすると良い(のかな)。


みんなでやるときはdrawとexecを分けて、
ポーズ中はdrawしかこないすけどヨロシク、
とする手もある。
(execで、アニメを1フレーム進める処理を書いておく)


なんと役にたたない知識だろうか!!
まぁ、一言で「ポーズ」といってもすべてが静止するわけではないので、
プログラマが仕様を考える楽しいところなのである。