Appearance
第16回 ワールド座標とカメラ
1 / 4 ワールド座標を描画から分離する
このステップの目的
ゲーム世界全体の絶対的な位置を表す「ワールド座標系」と、現在のディスプレイ表示枠を表す「スクリーン座標系」の違いを理解します。
2つの座標系の本質的な違い
横スクロールするゲームを制作するにあたり、以下の2種類の座標系を明確に使い分ける必要があります。
| 座標系の種類 | 原点(0, 0)の位置 | 役割と使われる場面 |
|---|---|---|
| ワールド座標系 | ステージ全体の左上端 | プレイヤーの位置、敵の位置、ブロックの配置、当たり判定、ゴール判定 |
| スクリーン座標系(画面座標系) | 現在表示されているウィンドウの左上端 | DXライブラリの描画関数(DrawBox や DrawExtendGraph)に渡す最終座標 |
ワールド座標系は、ステージがどれだけ横に長くなっても不変です。例えば、ステージ右端近くにあるゴールのワールドX座標が 2400 ピクセルであれば、カメラがどこを映していても、ゴールは常に 2400 の位置に存在します。
一方、スクリーン座標系は「カメラの位置から見た相対的な表示位置」です。
$$\text{画面X座標} = \text{ワールドX座標} - \text{カメラX座標}$$
たとえば、ゴールのワールドX座標が 2400 で、現在カメラが 2000 の位置を映している場合、画面上での描画X座標は $2400 - 2000 = 400$ ピクセル(画面中央やや右)となります。
更新処理や当たり判定にカメラ座標を持ち込まない
プレイヤーの移動、重力計算、地形衝突、およびゴール判定などのゲームロジックは、すべてワールド座標系で実行します。
もしオブジェクトの座標そのものをカメラの動きに合わせて書き換えてしまうと、以下のような不具合が発生します。
- 判定がカメラ表示に依存する: 画面外にいる敵の挙動や、遠くのゴール判定が正しく計算できなくなります。
- 演出による不具合: 画面を振動させるシェイク演出を追加した際、地形判定まで一緒に移動してしまい、キャラクターが地面をすり抜ける原因になります。
すべてのロジック更新(移動・重力・衝突・勝敗判定)はワールド座標系で完結させ、カメラは更新がすべて終わった描画処理の段階でのみ適用します。
チェックリスト
- ワールド座標系(絶対位置)とスクリーン座標系(表示位置)の違いを説明できる
- $\text{画面X} = \text{ワールドX} - \text{カメラX}$ の計算によって描画位置が求まる仕組みを理解している
- 物理更新や当たり判定にカメラ座標を持ち込まない理由を説明できる