Maps ja - Akiaaaa20/Bit8_CLI GitHub Wiki

Map システム

English | 繁體中文 | 日本語 | 한국어

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

これらは将来のバージョンで検討される可能性があります。

次へ

次のページ:

Nodes

関連ドキュメント:

Map は世界を定義し、Node はその世界に動作を与えます。