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)

Sprite와 함께 생성

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
)

자식 엔티티는 트랜스폼 계층과 레이어를 상속합니다 (재정의하지 않는 한).


Sound와 함께 생성

explosion = pyxen.world.spawn(
    sprite=assets.explosion,
    sound=assets.explosion_sfx,
    x=64,
    y=32
)

Sound 컴포넌트가 첨부되어 재생 준비 완료.


Music과 함께 생성

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 일관적