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
)

すべての引数はキーワード専用です。


パラメータ

パラメータ説明
namestrエンティティのオプション名。デバッグや検索に便利。
spriteSpriteスプライトコンポーネントをアタッチ。Spriteインスタンス必須。
xfloatワールドX初期位置。デフォルト:0.0
yfloatワールドY初期位置。デフォルト:0.0
parentEntity親エンティティ。階層的なトランスフォームを有効にする。
layerint描画レイヤー。親のレイヤーまたはデフォルトのワールドレイヤーにフォールバック。
soundSoundサウンドコンポーネントをアタッチ。
musicMusicミュージックコンポーネントをアタッチ(ストリーミング/デコード)。
mapGridMapInfoマップ情報からGridMapコンポーネントを作成。
bodyGridBodyGridBody物理コンポーネントをアタッチ。

戻り値

Entity

新しく作成されたエンティティインスタンス。


Transformの動作

生成されたすべてのエンティティは自動的にTransformを受け取ります:

x = 0.0
y = 0.0
scale_x = 1.0
scale_y = 1.0
rotation = 0.0

現在、生成時に設定可能なのはxyのみです。


レイヤーの解決

レイヤーは以下の順序で決定されます:

  1. 明示的なlayer引数
  2. 親のレイヤー(parentが設定されている場合)
  3. デフォルトのワールドレイヤー


基本エンティティの生成

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が発生します:

  • spriteSpriteでない
  • parentEntityでない
  • コンポーネントの型が期待されるクラスと一致しない

例:

pyxen.world.spawn(sprite="not a sprite")
# TypeError: spawn: sprite must be a Sprite

注意事項

  • エンティティは軽量です。
  • コンポーネントはオプションです。
  • エンティティは即座にワールドに登録されます。
  • 階層とレイヤーは生成時に解決されます。

設計思想

spawn()は意図的にコンポーネント駆動です。

サブクラスを作成しません。 コンポーネントをアタッチして動作を構成します。

これによりPyxenは:

  • 予測可能
  • データ指向
  • 初心者に優しい
  • ECSに一貫