Scene Graph

Les entités dans Pyxen peuvent être organisées en arbre — parents et enfants. C’est le scene graph. Il contrôle comment les entités héritent des transforms, comment la visibilité se propage et comment le rendu est ordonné.

Relations parent-enfant

N’importe quelle entity peut être parent ou enfant. Vous définissez la relation à la création ou par la suite :

# à la création
arm = world.spawn(x=10, y=0, parent=player)

# ou plus tard
arm.parent = player

Lorsqu’une entity a un parent :

Pour détacher une entity de son parent :

arm.parent = None

Layers

Chaque entity possède une layer (0–255). Les layers contrôlent l’ordre de rendu : les layers inférieures sont dessinées en premier, les layers supérieures sont dessinées par-dessus.

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

Au sein d’une layer, les entités sont triées par profondeur. La profondeur est déterminée par la position de l’entity dans le scene graph — les enfants plus profonds sont rendus après leurs parents.

Visibilité

Les entités ont deux propriétés de visibilité :

enemy.visible = False  # masque cette entity et tous ses enfants

Lorsque vous masquez un parent, tous ses enfants deviennent invisibles aussi, même si leur propre propriété visible est toujours True. Cela facilite la gestion de groupes entiers — masquez un panneau d’interface et tout ce qu’il contient disparaît.

Structure de scène typique

Un schéma courant consiste à organiser votre jeu en layers et en groupes :

def start():
    # layer 0 : arrière-plan
    world.spawn(layer=0, sprite=Sprite("tilemap"))

    # layer 1 : entités de jeu
    player = world.spawn(name="player", layer=1, sprite=Sprite("hero"))
    weapon = world.spawn(parent=player, x=8, y=0, sprite=Sprite("sword"))

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

L’arme suit automatiquement le joueur. L’interface est toujours au premier plan. Masquer ui_root masque toute l’interface.