pyxen.world.spawn()
ワールドに新しい**Entity**を作成し、オプションでコンポーネント(スプライト、サウンド、ミュージック、マップ、物理ボディなど)をアタッチします。
シーンにオブジェクトを追加する主な方法です。
構文
entity = pyxen.world.spawn(
*,
name=None,
sprite=None,
x=None,
y=None,
parent=None,
layer=None,
sound=None,
music=None,
map=None,
body=None
)
すべての引数はキーワード専用です。
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
name | str | エンティティのオプション名。デバッグや検索に便利。 |
sprite | Sprite | スプライトコンポーネントをアタッチ。Spriteインスタンス必須。 |
x | float | ワールドX初期位置。デフォルト:0.0 |
y | float | ワールドY初期位置。デフォルト:0.0 |
parent | Entity | 親エンティティ。階層的なトランスフォームを有効にする。 |
layer | int | 描画レイヤー。親のレイヤーまたはデフォルトのワールドレイヤーにフォールバック。 |
sound | Sound | サウンドコンポーネントをアタッチ。 |
music | Music | ミュージックコンポーネントをアタッチ(ストリーミング/デコード)。 |
map | GridMapInfo | マップ情報からGridMapコンポーネントを作成。 |
body | GridBody | GridBody物理コンポーネントをアタッチ。 |
戻り値
Entity
新しく作成されたエンティティインスタンス。
Transformの動作
生成されたすべてのエンティティは自動的にTransformを受け取ります:
x = 0.0
y = 0.0
scale_x = 1.0
scale_y = 1.0
rotation = 0.0
現在、生成時に設定可能なのはxとyのみです。
レイヤーの解決
レイヤーは以下の順序で決定されます:
- 明示的な
layer引数 - 親のレイヤー(
parentが設定されている場合) - デフォルトのワールドレイヤー
例
基本エンティティの生成
player = pyxen.world.spawn(x=32, y=16)
スプライト付きで生成
player = pyxen.world.spawn(
name="Player",
sprite=assets.player_sprite,
x=32,
y=16
)
子として生成
weapon = pyxen.world.spawn(
sprite=assets.sword,
parent=player,
x=8,
y=0
)
子エンティティはトランスフォーム階層とレイヤーを継承します(オーバーライドされない限り)。
サウンド付きで生成
explosion = pyxen.world.spawn(
sprite=assets.explosion,
sound=assets.explosion_sfx,
x=64,
y=32
)
Soundコンポーネントがアタッチされ、再生準備完了です。
ミュージック付きで生成
music_entity = pyxen.world.spawn(
music=assets.background_theme
)
Musicは内部デコーダーを使用し、エンティティにアタッチされます。
グリッドマップの生成
level = pyxen.world.spawn(
map=assets.level1_map
)
提供されたGridMapInfoからGridMapコンポーネントを初期化して作成します。
物理ボディ付きで生成
player = pyxen.world.spawn(
sprite=assets.player,
body=GridBody.dynamic(),
x=10,
y=5
)
グリッドベースの衝突用のGridBodyコンポーネントをアタッチします。
コンポーネントの概要
提供された引数に応じて、エンティティは以下を受け取る場合があります:
- Transform(常に)
- Name(オプション)
- Sprite
- Sound
- Music
- GridMap
- GridBody
- 親子関係
- レイヤー割り当て
型エラー
以下の場合にTypeErrorが発生します:
spriteがSpriteでないparentがEntityでない- コンポーネントの型が期待されるクラスと一致しない
例:
pyxen.world.spawn(sprite="not a sprite")
# TypeError: spawn: sprite must be a Sprite
注意事項
- エンティティは軽量です。
- コンポーネントはオプションです。
- エンティティは即座にワールドに登録されます。
- 階層とレイヤーは生成時に解決されます。
設計思想
spawn()は意図的にコンポーネント駆動です。
サブクラスを作成しません。 コンポーネントをアタッチして動作を構成します。
これによりPyxenは:
- 予測可能
- データ指向
- 初心者に優しい
- ECSに一貫