씬 그래프

Pyxen의 엔티티는 트리 구조로 구성할 수 있습니다 — 부모와 자식. 이것이 씬 그래프입니다. 엔티티가 트랜스폼을 상속하는 방법, 가시성이 전파되는 방법, 렌더링 순서를 제어합니다.

부모-자식 관계

모든 엔티티는 부모 또는 자식이 될 수 있습니다. 생성 시 또는 이후에 관계를 설정합니다:

# 생성 시
arm = world.spawn(x=10, y=0, parent=player)

# 또는 나중에
arm.parent = player

엔티티에 부모가 있으면:

엔티티를 부모에서 분리하려면:

arm.parent = None

레이어

모든 엔티티에는 레이어 (0–255)가 있습니다. 레이어는 렌더링 순서를 제어합니다: 낮은 레이어가 먼저 그려지고, 높은 레이어가 위에 그려집니다.

background = world.spawn(layer=0, sprite=Sprite("sky"))
player = world.spawn(layer=1, sprite=Sprite("hero"))
ui = world.spawn(layer=2, sprite=Sprite("health_bar"))

레이어 내에서 엔티티는 깊이로 정렬됩니다. 깊이는 씬 그래프에서 엔티티의 위치에 의해 결정됩니다 — 깊은 자식이 부모 다음에 렌더링됩니다.

가시성

엔티티에는 두 가지 가시성 속성이 있습니다:

enemy.visible = False  # 이 엔티티와 모든 자식을 숨김

부모를 숨기면, 자식의 visible 속성이 여전히 True이더라도 모든 자식이 보이지 않게 됩니다. 이를 통해 전체 그룹을 쉽게 전환할 수 있습니다 — UI 패널을 숨기면 그 안의 모든 것이 사라집니다.

일반적인 씬 구조

게임을 레이어와 그룹으로 구성하는 일반적인 패턴:

def start():
    # 레이어 0: 배경
    world.spawn(layer=0, sprite=Sprite("tilemap"))

    # 레이어 1: 게임 엔티티
    player = world.spawn(name="player", layer=1, sprite=Sprite("hero"))
    weapon = world.spawn(parent=player, x=8, y=0, sprite=Sprite("sword"))

    # 레이어 2: UI
    ui_root = world.spawn(name="ui", layer=2)
    world.spawn(parent=ui_root, x=10, y=10, sprite=Sprite("heart"))

무기는 플레이어를 자동으로 따라갑니다. UI는 항상 맨 위에 있습니다. ui_root를 숨기면 전체 UI가 숨겨집니다.