Maps ja - Akiaaaa20/Bit8_CLI GitHub Wiki
Map システム
BIT8_CLI は、2D ゲームの世界を作成するための Tile ベースの Map システムを提供します。
Map は登録済み Asset ID を使用し、サイズの変更に対応しています。また、Node や Camera を含めることもできます。
このガイドでは、BIT8_CLI 0.1.0 の Map システムについて説明します。
1. Map の概要
BIT8_CLI の Tile サイズは固定されています。
8 × 8 ピクセル
デフォルトの Map サイズは次のとおりです。
64 × 64 Tiles
Map の幅と高さは、それぞれ次の範囲で設定できます。
1 ~ 256 Tiles
Map Cell の最大数は次のとおりです。
65,536 Cells
Map のサイズは、64×64 ピクセルのゲーム用 Framebuffer とは独立しています。
そのため、画面に表示される範囲よりも大きな Map を作成できます。
2. Map ファイル
BIT8_CLI は次の拡張子を使用して Map データを保存します。
.b8map
例:
world.b8map
Map ファイルには Tile データが含まれ、Node や Camera を定義することもできます。
プロジェクト構成の例:
my-bit8-game/
├── main.b8
├── bit8.assets.toml
├── world.b8map
└── assets/
└── terrain (A).png
これは構成例です。
3. Map 座標
Map は Tile 座標を使用します。
各 Map Cell は、ゲーム世界内の 8×8 ピクセルの領域を表します。
例:
Tile (0, 0) → World Pixel (0, 0)
Tile (1, 0) → World Pixel (8, 0)
Tile (2, 0) → World Pixel (16, 0)
Tile (0, 1) → World Pixel (0, 8)
Tile 座標を Pixel 座標に変換するには、次の計算を使用します。
pixel_x = tile_x × 8
pixel_y = tile_y × 8
例えば、Tile 座標 (5, 3) は World Pixel 座標 (40, 24) に対応します。
4. Map Cell
各 Map Cell は登録済み Tile を参照できます。
例:
A1
A2
A3
これらの識別子は、次のファイルで管理される登録済み Asset を参照します。
bit8.assets.toml
空の Map Cell は次のように表されます。
--
簡略化した Map の例:
A1 A1 A1 A1 A1
A1 -- -- -- A1
A1 -- A2 -- A1
A1 -- -- -- A1
A1 A1 A1 A1 A1
これは Map Cell の概念を示す例であり、完全な .b8map ファイルではありません。
5. Map の描画
現在の Map を描画するには map() を使用します。
func draw()
cls(0)
map()
end
このコードは Framebuffer をクリアし、Map を描画します。
表示範囲は Framebuffer と現在有効な Camera によって決まります。
完全な引数の仕様については、対応する BIT8_CLI のリリースソースを参照してください。
6. Map Cell の読み取り
BIT8_CLI は次の API を提供します。
mget(...)
この API は Runtime Map から Tile の値を読み取ります。
Map 操作では Pixel 座標ではなく Tile 座標を使用します。
7. Map Cell の変更
BIT8_CLI は次の API を提供します。
mset(...)
この API は Runtime Map 内の Tile の値を変更します。
Runtime で行われた Map の変更は、実行中のゲーム状態に反映されます。
Editor を使用して元の .b8map ファイルに変更を保存する操作とは異なります。
8. Map Workspace
BIT8_CLI の VS Code Extension には Map Workspace が統合されています。
Map Workspace は、Map データを視覚的に編集するためのツールを提供します。
主な機能:
- Map Canvas
- Tile の選択
- Tile の描画
- Map Cell の確認
- Zoom 操作
- Node の選択と編集
- Camera の可視化
- Property の確認
Map Workspace は Runtime と共通のプロジェクトデータを使用します。
Editor のインターフェース自体が Map の動作仕様を決定するわけではありません。
9. Map 内の Node
Map には Node を配置できます。
Node には次の情報を定義できます。
- 安定した Node ID
- 名前
- 位置
- 有効・無効の状態
- Script の参照
- 任意の Sprite 参照
- 任意の Collider
Node はゲーム世界の構造を構成する要素です。
Node Script は Runtime の実行中に動作を制御できます。
例:
func update()
self.x = self.x + 1
end
詳しくは Nodes を参照してください。
10. Map 内の Camera
Map には Camera Node を含めることができます。
Camera はゲーム世界のどの範囲を表示するかを決定します。
BIT8_CLI は 64×64 ピクセルの Viewport を使用します。
Camera の座標は Viewport の中心を表します。
World 座標に対応した描画処理は、有効な Camera に基づいて座標変換されます。
一方、次のような Screen 座標の描画処理は:
cls(0)
pix(32, 32, 7)
引き続き Screen 座標を使用します。
詳しくは Camera を参照してください。
11. Solid Tile と Collision
登録済み Tile は Solid に設定できます。
例:
solid = [6]
これは、対応する Tilesheet の 6 番目の Tile を Solid として指定する設定です。
Solid Tile は Collision 判定において、8×8 ピクセル全体を占有します。
Node は次のメソッドを使用できます。
self:collide(dx, dy)
self:move(dx, dy)
詳しくは Collision を参照してください。
12. Map サイズとパフォーマンス
サポートされる最大 Map サイズ:
256 × 256 Tiles
最大 Cell 数:
65,536 Cells
Map 全体が 64×64 ピクセルの Framebuffer 内に収まる必要はありません。
現在の Viewport には、ゲーム世界の一部分が表示されます。
大きな Map を設計する場合は、描画処理やゲームプレイに必要なパフォーマンスも考慮してください。
13. 現在の制限
BIT8_CLI 0.1.0 は Tile ベースの Map システムを提供します。
次の機能は、確立された 0.1.0 の Map システムには含まれていません。
- 複数の独立した Map Layer
- 大きな背景画像を World Object として直接配置する機能
- 完全な Physics Engine
これらは将来のバージョンで検討される可能性があります。
次へ
次のページ:
関連ドキュメント:
Map は世界を定義し、Node はその世界に動作を与えます。