Camera ja - Akiaaaa20/Bit8_CLI GitHub Wiki
Camera システム
BIT8_CLI は、ゲーム世界の表示範囲を制御する Camera システムを提供します。
BIT8_CLI 0.1.0 では、Camera は Map データと関連付けられ、World 座標を使用する描画に影響します。
ゲームは固定の 64 × 64 ピクセル Viewport を使用します。
1. Camera の概要
Camera はゲーム世界の表示範囲の中心を定義します。
Framebuffer の解像度は固定されています。
64 × 64 pixels
Map は Viewport より大きくすることができます。
Camera は、大きなゲーム世界のどの部分を画面に表示するかを決定します。
2. Camera と Map
Camera データは Map システムの一部として保存されます。
.b8map ファイルには、次のデータを含めることができます。
- Tile データ
- Node
- Camera
Camera を使用すると、Framebuffer の解像度を変更せずに Map の異なる領域を表示できます。
詳しくは Maps を参照してください。
3. Camera の位置
Camera は World 座標上の位置を持ちます。
この位置は Viewport の中心を表します。
例:
Camera position: (100, 80)
Viewport size: 64 × 64
概念的には、表示範囲は Camera の中心から各方向へ約 32 ピクセル広がります。
おおよその表示範囲:
X: 68 to 131
Y: 48 to 111
正確なピクセル境界は Runtime の座標処理や丸め規則によって異なります。
4. World 座標
World 座標は、ゲーム世界内の位置を表します。
例えば:
- Map Tile
- Node
- Node Sprite
- World 座標を使用する描画処理
Camera が有効な場合、対応する World 座標の描画は Camera の位置に基づいて変換されます。
これにより、Viewport はゲーム世界の異なる領域を表示できます。
5. Screen 座標
Screen 座標は Framebuffer 内の固定位置を表します。
座標範囲:
X: 0 to 63
Y: 0 to 63
一部の描画処理は Screen 座標を使用します。
例:
cls(0)
pix(32, 32, 7)
これらの処理は Screen 座標のままであり、Camera によって移動しません。
UI や画面上の Overlay を作成する際に便利です。
6. World 座標から Screen 座標への変換
簡略化した Camera 変換式:
screen_x = world_x - camera_x + 32
screen_y = world_y - camera_y + 32
例:
World position: (100, 80)
Camera position: (100, 80)
Screen position: (32, 32)
Camera の中心にあるオブジェクトは、画面の中央付近に表示されます。
この式は基本的な概念を示したものです。
正確なピクセル位置は Runtime の整数座標処理によって異なる場合があります。
7. Active Camera の選択
Map には複数の Camera を含めることができます。
BIT8_CLI 0.1.0 は、次のルールで Active Camera を選択します。
有効な Camera のうち、ID が最も小さいものを選択します。
これにより、複数の Camera が存在しても選択結果が予測可能になります。
例:
Camera ID 1 → Disabled
Camera ID 2 → Enabled
Camera ID 3 → Enabled
Active Camera:
Camera ID 2
8. Camera と Tile Rendering
Map Rendering は World 座標を使用します。
Camera が有効な場合、Map は表示対象の World 領域に基づいて描画されます。
例:
func draw()
cls(0)
map()
end
Camera は、64×64 Framebuffer 内に表示される Map の範囲を決定します。
9. Camera と Sprite
Node Sprite は World 座標を使用します。
Camera が有効な場合、対応する Sprite Rendering は Screen 座標に変換されます。
例:
func draw()
self:spr()
end
Node 自体の World 座標は維持されます。
Camera は Sprite が画面上に表示される位置に影響します。
詳しくは Sprites and Animation を参照してください。
10. Camera と UI
ゲームでは、画面上の固定位置にグラフィックを表示する必要がある場合があります。
例えば:
- HP 表示
- カウンター
- メニュー
- Screen Overlay
このような要素には Screen 座標の描画が便利です。
例:
func draw()
cls(0)
map()
pix(32, 32, 7)
end
ここでは pix() が固定の Screen 座標にピクセルを描画します。
Camera はこのピクセルの位置を変更しません。
11. Camera の編集
BIT8_CLI の VS Code Map Workspace は Camera の可視化に対応しています。
これにより、Map を編集しながら Camera の位置を確認できます。
Camera データは Map のプロジェクトデータに含まれます。
Runtime は Active Camera の選択と適用を担当します。
詳しくは Map Workspace を参照してください。
12. Camera と Viewport サイズ
BIT8_CLI 0.1.0 の Framebuffer 解像度は固定されています。
64 × 64 pixels
Camera が変更するのは表示する World 領域です。
Framebuffer 自体の解像度は変更されません。
そのため、小さな Viewport を通じて大きな Map を探索できます。
13. 現在の制限
BIT8_CLI 0.1.0 の Camera システムは、主に次の機能に対応しています。
- Map データ内の Camera
- World 座標の描画オフセット
- 固定の 64×64 Viewport
- 決定的な Active Camera の選択
- Screen 座標による描画
高度な Camera Effect、映画的な Transition、汎用的な Camera Script Framework は、確立された 0.1.0 の機能には含まれていません。
次へ
Core Systems の次は開発ツールのドキュメントです。
関連ドキュメント:
Map が世界を定義し、Camera が見える範囲を決定します。