场景图

Pyxen 中的实体可以组织成树状结构——父节点和子节点。这就是场景图。它控制实体如何继承变换、可见性如何传播以及渲染顺序。

父子关系

任何实体都可以是父节点或子节点。你可以在生成时或之后设置关系:

# at spawn
arm = world.spawn(x=10, y=0, parent=player)

# or later
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  # hide this entity and all its children

当你隐藏一个父节点时,它所有的子节点也会变得不可见,即使子节点自己的 visible 属性仍然是 True。这使得切换整个组变得容易——隐藏一个 UI 面板,里面的一切都会消失。

典型场景结构

一个常见的模式是将游戏组织成图层和分组:

def start():
    # layer 0: background
    world.spawn(layer=0, sprite=Sprite("tilemap"))

    # layer 1: game entities
    player = world.spawn(name="player", layer=1, sprite=Sprite("hero"))
    weapon = world.spawn(parent=player, x=8, y=0, sprite=Sprite("sword"))

    # layer 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。