外部設計 - noza-15/C-dev GitHub Wiki

外部設計周りの伝達事項

global.h

global.hに記述されているextern指定子の付いた変数は全てのプログラムファイルから読み取り可能です. 変数の値書き換えは基本的にmain.cからのみとします.

frame_countはアプリケーションが起動されてからの合計経過フレームカウント数です. フレームはrefresh_msecミリ秒毎にカウントされます初期設定は30なので毎秒33フレームぐらいになっています.オーバーフローを避けるためにMAX_FRAMEより大きくなると0に戻すようにしています.

window_widthからviewport_heightまでは画面の状態を表す変数で window_widthとwindow_heightが現在のウィンドウの横幅と縦の高さ(ピクセル)です. viewport_start_xとviewport_start_yは描画領域が始まるx座標とy座標です. この時,原点はウィンドウの左下で右方向がx軸,上方向がy軸になっています. ウィンドウが極端に縦長の時や横長の時でもアスペクト比が16:9から4:3ぐらいの範囲に収まるようにするために設定しています. viewport_widthとviewport_heightは描画領域の横幅と高さ(ピクセル)です.

stateは現在のゲーム状態です.ゲーム画面にいるのかメニュー画面にいるのか,ランキング画面にいるのかという状態を保持しています.

各フレーム毎の処理について

ゲーム画面にいる時はgame_disp()関数(game.cにある)が毎フレームごとに呼び出されます.game_disp()の中でgame_refresh()関数が呼び出されているのでこちらも毎フレームごとに実行されます.このgame_refresh()の中で各状態を更新します. 現在は障害物の状態更新,プレイヤーの座標受け取り,全障害物との当たり判定が実行されるようになっています.

game_disp()関数の中ではrenderAll()という関数も呼び出されます. ここではプレイヤーを描画するrenderPlayer(),障害物を描画するrenderObstacles(),背景を描画するrenderBackground()が呼び出されます. renderAll()関数はデベロッパーモードだと3回呼び出されるので,これらの関数の中で状態更新をしてしまうとバグります.また,これらの関数の中ではglPushMatrix()やglPopMatrix()を使って関数の呼び出し前と呼び出し後の座標変換行列が同じになるようにしてください.