Sprites and Animation ja - Akiaaaa20/Bit8_CLI GitHub Wiki

Sprite と Animation

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

BIT8_CLI は、2D ゲーム向けの軽量な Sprite および Animation システムを提供します。

Sprite は Asset Registry に登録された Tile を使用します。名前付き Animation の定義、再生速度の設定、Node への関連付けが可能です。

BIT8_CLI 0.1.0 では、各 Node が独立した Animation の再生状態を保持します。

そのため、複数のゲームオブジェクトが同じ Sprite Definition を使用しながら、それぞれ異なる Animation を再生できます。

1. Sprite とは?

Sprite はゲームオブジェクトが使用できるグラフィック定義です。

例えば、次のようなものに使用できます。

  • プレイヤーキャラクター
  • 敵キャラクター
  • NPC
  • インタラクティブなオブジェクト
  • アニメーションする装飾

Sprite は静止画像、または複数の Animation Frame を持つことができます。

BIT8_CLI は Sprite Definition と個々の Node Instance を分離して管理します。

そのため、複数の Node が同じ Sprite を参照しても、Animation の再生位置を共有する必要はありません。

2. Sprite Registry

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 テーブル構造については、対応するリリースの実装を参照してください。

3. Sprite Definition

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 設定形式ではありません。

4. Animation Frame

Animation は複数の Frame で構成されます。

各 Frame は登録済み Asset システムのグラフィックを参照します。

例:

walk

Frame 1 → A2
Frame 2 → A3
Frame 3 → A4

再生中、Runtime は Animation のタイミングに基づいて適切な Frame を選択します。

Node は選択された Frame を描画できます。

5. Animation の再生速度

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 を共存させることができます。

6. Node に Sprite を関連付ける

Node は次のメソッドで Sprite を選択できます。

self:sprite("Player")

これは Player という名前の Sprite Definition を参照します。

例:

func init()
    self:sprite("Player")
end

使用する Sprite は、事前に Sprite Registry に定義されている必要があります。

7. Animation の再生

名前付き Animation を選択するには、次のメソッドを使用します。

self:play("walk")

例:

func init()
    self:sprite("Player")
    self:play("idle")
end

このコードは Player Sprite を選択し、idle Animation の再生を要求します。

Animation 名は、選択した Sprite Definition に存在している必要があります。

8. Sprite の描画

Node の現在の Sprite Frame を描画するには、次のメソッドを使用します。

self:spr()

例:

func draw()
    self:spr()
end

描画には Node の Sprite 状態と位置が使用されます。

有効な Camera によって、最終的な画面上の位置が変わる場合があります。

詳しくは Camera を参照してください。

9. Node Script の使用例

この例では、次の条件を前提とします。

  • Player という Sprite が定義されている。
  • Sprite に idle と walk Animation が存在する。
  • 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 の実装で確認してください。

10. 独立した Animation State

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 を複数のゲームオブジェクトで再利用できます。

11. 永続的な Sprite 参照

BIT8_CLI 0.1.0 は、.b8map データ内に Sprite 参照を保存する機能をサポートしています。

Node は次のような Sprite 名を保存できます。

Player

Runtime は Node の初期化関数を実行する前に、保存された Sprite 参照を解決します。

そのため、Script 内で毎回 Sprite を手動設定しなくても、Node は指定された Sprite を使用して開始できます。

Script から Animation の選択や Sprite の変更を行うこともできます。

12. Sprite と Map Workspace

VS Code の Map Workspace は、Sprite に関連する Node プロパティの操作に対応しています。

これにより、視覚的な編集と Runtime の動作を連携させることができます。

例えば、Map の編集中に Node と Sprite Definition を関連付けることができます。

Runtime はゲームを読み込む際に、保存されたプロジェクトデータを使用します。

Sprite Registry は引き続き Sprite のグラフィックと Animation を定義します。

13. Sprite と登録済み Asset

Sprite は登録済みのグラフィック Asset に依存します。

bit8.assets.toml
        │
        ▼
Registered Tiles
        │
        ▼
bit8.sprites.toml
        │
        ▼
Sprite Definitions
        │
        ▼
Node Animation State
        │
        ▼
Runtime Rendering

この分離設計には、次の利点があります。

  1. Tile を複数の Sprite で再利用できます。
  2. Sprite Definition を複数の Node で再利用できます。
  3. 各 Node が独立した Animation State を保持できます。
  4. Stable Asset ID により、グラフィックリソースを安定して参照できます。

詳しくは Assets and Tilesheets を参照してください。

14. 現在の制限

BIT8_CLI 0.1.0 は軽量な Sprite と Animation システムを提供します。

完全な Skeletal Animation や Character Rigging システムではありません。

現在のシステムは、主に次の機能に対応しています。

  • 登録済み Tile の参照
  • 再利用可能な Sprite Definition
  • 名前付き Animation
  • 設定可能な Animation FPS
  • Node ごとの独立した Animation State
  • Runtime による Sprite 描画

高度な Animation 機能は、将来のリリースで検討される可能性があります。

次へ

次のページ:

Collision

関連ドキュメント:

Sprite を一度定義すれば、それぞれの Node が独自の動きを生み出せます。