Repository navigation
Nodes ja
Node は BIT8_CLI の中核となる構成要素の一つです。
Node はゲーム世界内のオブジェクトを表します。プロパティの保持、Script の実行、Collision 判定、Sprite の表示などを行うことができます。
BIT8_CLI 0.1.0 では、Node は Map システムの一部として定義され、Runtime によって実行されます。
Main assembles the game. Nodes live the game.
Main がゲームを組み立て、Node がその世界で動作します。
Node はゲーム世界に存在するオブジェクトです。
例えば、次のようなものを Node として表現できます。
- プレイヤーキャラクター
- 敵キャラクター
- NPC
- インタラクティブなオブジェクト
- 移動する足場
- 独自の動作を持つ装飾オブジェクト
各 Node は独自の位置、プロパティ、動作を持つことができます。
単純な Tile とは異なり、Node は Script を実行し、Runtime 中の状態を保持できます。
Node は Map データの一部として保存されます。
BIT8_CLI は .b8map 形式を使用します。
Map には次のデータを含めることができます。
- Tile データ
- Node
- Camera
Node は Tile Grid とは独立しています。
そのため、Node は個々の Map Cell に制限されずに移動できます。
例えば、Map が 8×8 ピクセルの Tile を使用していても、キャラクターは 1 ピクセル単位で移動できます。
詳しくは Maps を参照してください。
各 Node は Script に次のプロパティを公開します。
| プロパティ | 説明 |
|---|---|
self.id |
安定した Node 識別子 |
self.name |
Node の名前 |
self.x |
World 座標の X |
self.y |
World 座標の Y |
self.enabled |
Node の有効状態 |
例:
func update()
self.x = self.x + 1
endこのコードは、更新ごとに Node の X 座標を増加させます。
Node の位置は World Pixel 座標で表されます。
Node は BIT8_CLI の Lua ベースの Script を参照できます。
Script の拡張子は次のとおりです。
.b8
例:
player.b8
Node Script では、次の Lifecycle Function を定義できます。
func init()
end
func update()
end
func draw()
endこれらの関数は、初期化、動作の更新、描画を担当します。
Runtime はゲームの Lifecycle に従って Node Script を実行します。
Node Script 内では、self は現在の Node を表します。
self を使用して Node のプロパティやメソッドにアクセスできます。
例:
func init()
self.speed = 1
end
func update()
self.x = self.x + self.speed
endこの例では、speed という Runtime プロパティを作成しています。
カスタム Node State は Runtime の実行中に保持されます。
Script で作成したカスタムプロパティが、元の .b8map ファイルへ自動保存されるわけではありません。
Node は座標を直接変更できます。
self.x = self.x + 1ただし、座標を直接変更することと Collision を考慮した移動は異なります。
BIT8_CLI は次のメソッドを提供します。
self:move(dx, dy)このメソッドは、サポートされている Collision ルールに従って Node の移動を試みます。
例:
func update()
self:move(1, 0)
endこのコードは Node を右に 1 ピクセル移動させようとします。
BIT8_CLI は Node 用の Collision Query を提供します。
self:collide(dx, dy)このメソッドは、指定した移動が対応する Collision Geometry と衝突するかどうかを確認します。
判定自体は Node を移動させません。
例:
func update()
if not self:collide(1, 0) then
self:move(1, 0)
end
endこのコードは、右方向への移動が妨げられていないか確認してから移動を試みます。
Runtime は Solid Tile との Collision に対応しています。
Node には任意の Collider 情報を定義することもできます。
BIT8_CLI 0.1.0 は完全な Physics Engine を提供するものではありません。
詳しくは Collision を参照してください。
Collision を考慮した移動では、ピクセル単位の判定を使用します。
Runtime は X 軸を先に処理し、その後 Y 軸を処理します。
移動は 1 ピクセルずつ段階的に判定されます。
これにより、Node は Tile ベースの Collision World 内でもピクセル単位で移動できます。
例:
self:move(2, 1)この場合、最初に水平方向の移動を試み、その後垂直方向の移動を処理します。
Collision によって、要求した移動の一部または全部が妨げられる場合があります。
Node は Sprite Definition を使用してグラフィックを表示できます。
Sprite Definition は次のファイルに保存されます。
bit8.sprites.toml
Node は定義済みの Sprite を関連付けることができます。
self:sprite("Player")Sprite には名前付き Animation を定義できます。
例:
self:play("walk")現在の Sprite Frame を描画するには:
self:spr()使用例:
func init()
self:sprite("Player")
self:play("idle")
end
func draw()
self:spr()
endこの例では、Player という Sprite と idle という Animation が事前に定義されている必要があります。
BIT8_CLI 0.1.0 は、Map データに Sprite 参照を保存する機能をサポートしています。
Node は Sprite Definition の名前を保持できます。
例:
Player
Runtime は Node の初期化関数を実行する前に、保存された Sprite 参照を解決します。
そのため、各 Script で Sprite を手動設定しなくても、Node は指定された Sprite を使用して開始できます。
Node は次のプロパティを公開します。
self.enabledこのプロパティは Node が有効かどうかを表します。
例:
func update()
if self.enabled then
self.x = self.x + 1
end
end有効状態はゲーム内の動作制御に利用できます。
無効化された Node の正確な Runtime 処理については、対応するリリースの実装を確認してください。
BIT8_CLI は Main Script と Node の動作を分離しています。
Main Script はゲーム全体の Lifecycle を管理できます。
func init()
end
func update()
end
func draw()
cls(0)
map()
endNode Script は個々のゲームオブジェクトの動作に集中します。
例:
func init()
self.speed = 1
end
func update()
self:move(self.speed, 0)
end
func draw()
self:spr()
endこの設計により、ゲームをモジュール化して構築できます。
Main がゲームを組み立てます。
Node がゲーム世界の中で動作します。
BIT8_CLI の VS Code Map Workspace には Node 編集機能があります。
Workspace では、サポートされている Node プロパティを確認・変更できます。
主な項目:
- Node の選択
- 位置
- 名前
- Script 参照
- 有効状態
- 対応する Sprite と Collider のプロパティ
Map Workspace はプロジェクトデータの編集を担当します。
Runtime は Node の動作を実行します。
詳しくは Map Workspace を参照してください。
BIT8_CLI 0.1.0 は軽量な Node システムを提供します。
完全な Scene Tree Engine ではありません。
次の機能は、確立された 0.1.0 の Node モデルには含まれていません。
- 汎用的な階層型 Scene Tree
- 完全な Rigid Body Physics
- 完全な Event / Signal システム
- 任意の Runtime プロパティの自動永続化
Node システムは、軽量なゲームオブジェクト、Script、移動、描画を中心に設計されています。
次のページ:
関連ドキュメント:
Main がゲームを組み立て、Node がその世界で動作します。
Current Version: 0.1.0