Repository navigation
Sprites and Animation ja
BIT8_CLI は、2D ゲーム向けの軽量な Sprite および Animation システムを提供します。
Sprite は Asset Registry に登録された Tile を使用します。名前付き Animation の定義、再生速度の設定、Node への関連付けが可能です。
BIT8_CLI 0.1.0 では、各 Node が独立した Animation の再生状態を保持します。
そのため、複数のゲームオブジェクトが同じ Sprite Definition を使用しながら、それぞれ異なる Animation を再生できます。
Sprite はゲームオブジェクトが使用できるグラフィック定義です。
例えば、次のようなものに使用できます。
- プレイヤーキャラクター
- 敵キャラクター
- NPC
- インタラクティブなオブジェクト
- アニメーションする装飾
Sprite は静止画像、または複数の Animation Frame を持つことができます。
BIT8_CLI は Sprite Definition と個々の Node Instance を分離して管理します。
そのため、複数の Node が同じ Sprite を参照しても、Animation の再生位置を共有する必要はありません。
Sprite Definition は、プロジェクト内の任意の設定ファイルに保存されます。
bit8.sprites.toml
このファイルには、Runtime の Sprite システムで使用する定義が含まれます。
プロジェクト構成の例:
my-bit8-game/
├── main.b8
├── bit8.assets.toml
├── bit8.sprites.toml
├── world.b8map
└── assets/
└── characters (A).png
Sprite Registry は Asset Registry と連携します。
Asset Registry は登録済み Tile を識別します。
Sprite Registry は、それらの Tile を Sprite や Animation として使用する方法を定義します。
実際の TOML テーブル構造については、対応するリリースの実装を参照してください。
Sprite Definition は再利用可能なグラフィックリソースを表します。
例えば、プロジェクトに次の名前の Sprite を定義できます。
Player
この Sprite には、次のような Animation を含めることができます。
idle
walk
attack
各 Animation は登録済み Tile を参照できます。
例:
Player
│
├── idle
│ └── A1
│
├── walk
│ ├── A2
│ ├── A3
│ └── A4
│
└── attack
├── A5
└── A6
この図は Sprite、Animation、登録済み Tile の関係を示しています。
実際の TOML 設定形式ではありません。
Animation は複数の Frame で構成されます。
各 Frame は登録済み Asset システムのグラフィックを参照します。
例:
walk
Frame 1 → A2
Frame 2 → A3
Frame 3 → A4
再生中、Runtime は Animation のタイミングに基づいて適切な Frame を選択します。
Node は選択された Frame を描画できます。
BIT8_CLI がサポートする Animation の再生速度は次の範囲です。
1 ~ 30 FPS
FPS は Frames Per Second の略で、1 秒間に表示する Frame 数を表します。
| Animation FPS | Frame の表示時間(約) |
|---|---|
| 1 FPS | 1 秒 |
| 5 FPS | 0.2 秒 |
| 10 FPS | 0.1 秒 |
| 15 FPS | 0.067 秒 |
| 30 FPS | 0.033 秒 |
BIT8_CLI Runtime は固定の Simulation Rate を使用します。
30 Hz
Animation の再生速度は Simulation Rate とは独立して設定できます。
これにより、同じゲーム内で速い Animation と遅い Animation を共存させることができます。
Node は次のメソッドで Sprite を選択できます。
self:sprite("Player")これは Player という名前の Sprite Definition を参照します。
例:
func init()
self:sprite("Player")
end使用する Sprite は、事前に Sprite Registry に定義されている必要があります。
名前付き Animation を選択するには、次のメソッドを使用します。
self:play("walk")例:
func init()
self:sprite("Player")
self:play("idle")
endこのコードは Player Sprite を選択し、idle Animation の再生を要求します。
Animation 名は、選択した Sprite Definition に存在している必要があります。
Node の現在の Sprite Frame を描画するには、次のメソッドを使用します。
self:spr()例:
func draw()
self:spr()
end描画には Node の Sprite 状態と位置が使用されます。
有効な Camera によって、最終的な画面上の位置が変わる場合があります。
詳しくは Camera を参照してください。
この例では、次の条件を前提とします。
-
Playerという Sprite が定義されている。 - Sprite に
idleとwalkAnimation が存在する。 - Node にこの Script が割り当てられている。
func init()
self:sprite("Player")
self:play("idle")
end
func update()
if btn(LEFT) then
self:move(-1, 0)
self:play("walk")
elseif btn(RIGHT) then
self:move(1, 0)
self:play("walk")
else
self:play("idle")
end
end
func draw()
self:spr()
endこの例では、Node の移動と Animation の選択を組み合わせています。
Animation の切り替えを設計する際は、self:play() を繰り返し呼び出した場合の正確な動作を Runtime の実装で確認してください。
BIT8_CLI の重要な特徴の一つは、Animation の再生状態を各 Node が個別に保持することです。
例えば、2 つの Node があるとします。
Node 1 → Player Sprite → walk
Node 2 → Player Sprite → idle
両方の Node は同じ Sprite Definition を参照しています。
しかし、Animation State は独立しています。
例:
Node 1
Frame: A3
Node 2
Frame: A1
この仕組みにより、同じ Sprite Definition を複数のゲームオブジェクトで再利用できます。
BIT8_CLI 0.1.0 は、.b8map データ内に Sprite 参照を保存する機能をサポートしています。
Node は次のような Sprite 名を保存できます。
Player
Runtime は Node の初期化関数を実行する前に、保存された Sprite 参照を解決します。
そのため、Script 内で毎回 Sprite を手動設定しなくても、Node は指定された Sprite を使用して開始できます。
Script から Animation の選択や Sprite の変更を行うこともできます。
VS Code の Map Workspace は、Sprite に関連する Node プロパティの操作に対応しています。
これにより、視覚的な編集と Runtime の動作を連携させることができます。
例えば、Map の編集中に Node と Sprite Definition を関連付けることができます。
Runtime はゲームを読み込む際に、保存されたプロジェクトデータを使用します。
Sprite Registry は引き続き Sprite のグラフィックと Animation を定義します。
Sprite は登録済みのグラフィック Asset に依存します。
bit8.assets.toml
│
▼
Registered Tiles
│
▼
bit8.sprites.toml
│
▼
Sprite Definitions
│
▼
Node Animation State
│
▼
Runtime Rendering
この分離設計には、次の利点があります。
- Tile を複数の Sprite で再利用できます。
- Sprite Definition を複数の Node で再利用できます。
- 各 Node が独立した Animation State を保持できます。
- Stable Asset ID により、グラフィックリソースを安定して参照できます。
詳しくは Assets and Tilesheets を参照してください。
BIT8_CLI 0.1.0 は軽量な Sprite と Animation システムを提供します。
完全な Skeletal Animation や Character Rigging システムではありません。
現在のシステムは、主に次の機能に対応しています。
- 登録済み Tile の参照
- 再利用可能な Sprite Definition
- 名前付き Animation
- 設定可能な Animation FPS
- Node ごとの独立した Animation State
- Runtime による Sprite 描画
高度な Animation 機能は、将来のリリースで検討される可能性があります。
次のページ:
関連ドキュメント:
Sprite を一度定義すれば、それぞれの Node が独自の動きを生み出せます。
Current Version: 0.1.0