Szenengraph

Entitäten in Pyxen können in einem Baum organisiert werden — Eltern und Kinder. Das ist der Szenengraph. Er steuert, wie Entitäten Transformationen erben, wie sich Sichtbarkeit ausbreitet und wie die Render-Reihenfolge bestimmt wird.

Eltern-Kind-Beziehungen

Jede Entität kann ein Elternteil oder ein Kind sein. Du setzt die Beziehung beim Erzeugen oder später:

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

# oder später
arm.parent = player

Wenn eine Entität ein Elternteil hat:

Um eine Entität von ihrem Elternteil zu lösen:

arm.parent = None

Ebenen

Jede Entität hat eine Ebene (0–255). Ebenen steuern die Render-Reihenfolge: niedrigere Ebenen werden zuerst gezeichnet, höhere Ebenen darüber.

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"))

Innerhalb einer Ebene werden Entitäten nach Tiefe sortiert. Die Tiefe wird durch die Position der Entität im Szenengraph bestimmt — tiefere Kinder werden nach ihren Eltern gerendert.

Sichtbarkeit

Entitäten haben zwei Sichtbarkeitseigenschaften:

enemy.visible = False  # verstecke diese Entität und alle ihre Kinder

Wenn du ein Elternteil versteckst, werden alle seine Kinder ebenfalls unsichtbar, auch wenn ihre eigene visible-Eigenschaft noch True ist. Das macht es einfach, ganze Gruppen umzuschalten — verstecke ein UI-Panel und alles darin verschwindet.

Typische Szenenstruktur

Ein gängiges Muster ist, dein Spiel in Ebenen und Gruppen zu organisieren:

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

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

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

Die Waffe folgt dem Spieler automatisch. Die UI ist immer oben. Das Verstecken von ui_root versteckt die gesamte UI.