pyxen.Sprite

Représente une image affichable assignée à une Entity.

Les sprites sont des objets immuables. Pour changer ce qu’une entité affiche, remplacez le sprite.

Pour les concepts de rendu, consultez Sprites et Rendu.


Constructeur

Sprite(
    image,
    *,
    tile=None,
    pivot=None,
    animation=None,
    loop=True
)

Vous pouvez passer image en argument positionnel ou par mot-clé — mais pas les deux.


Paramètres

ParamètreTypeDescription
imagestrNom de l’asset image
tile(x, y, w, h)Sous-rectangle de l’image
pivot(x, y)Point de pivot en pixels
animationstrNom d’une animation de sprite à jouer
loopboolSi l’animation boucle (défaut True)

image (Requis)

Sprite("hero")

Si l’image n’existe pas :

ValueError: Failed to load image 'hero'

tile (Optionnel)

Définit un sous-rectangle de la texture.

Sprite(
    "tileset",
    tile=(0, 0, 16, 16)
)

Si non spécifié, l’image entière est utilisée.


pivot (Optionnel)

Définit le point d’origine du sprite.

Sprite(
    "hero",
    pivot=(8, 8)
)

Si non spécifié : (0, 0) (coin supérieur gauche).


animation (Optionnel)

Joue une animation nommée définie dans la timeline d’animation de l’éditeur de sprites. Le moteur lit les données d’animation (séquence de frames, FPS) depuis les métadonnées de l’image et avance les frames automatiquement.

Sprite("hero", animation="walk")

Ne peut pas être combiné avec tile — utilisez l’un ou l’autre.

L’animation commence immédiatement lorsqu’elle est assignée à une entité. Par défaut elle boucle. Utilisez loop=False pour les animations à lecture unique :

Sprite("hero", animation="death", loop=False)

Pour vérifier l’état de l’animation, utilisez le composant e.animation de l’entité.


loop (Optionnel)

Contrôle si l’animation se répète. Utilisé uniquement avec animation. Défaut : True.

Sprite("hero", animation="jump", loop=False)

Exemple

hero_sprite = Sprite(
    image="hero",
    tile=(0, 0, 16, 16),
    pivot=(8, 8)
)

Sprite animé :

hero_sprite = Sprite(
    image="hero",
    animation="walk",
    pivot=(8, 8)
)

Assigner un Sprite

Vous pouvez assigner lors du spawn :

player = world.spawn(
    sprite=Sprite("hero"),
    x=32,
    y=32
)

Ou plus tard :

player.sprite = Sprite("hero_idle")

Immutabilité des Sprites

Les sprites sont immuables — vous ne pouvez pas modifier un sprite après sa création.

Remplacez plutôt le sprite de l’entité :

player.sprite = Sprite("hero_jump")

Couleur

Les entités exposent une propriété de couleur qui teinte le sprite sans le remplacer :

entity.color = (r, g, b, a)

Exemple :

player.color = (1.0, 0.5, 0.5, 1.0)

Couleur par défaut : (1.0, 1.0, 1.0, 1.0)

La lecture de la couleur renvoie un objet Color :

c = player.color
print(c.r, c.g, c.b, c.a)

Animation

La méthode recommandée pour animer les sprites est avec le paramètre animation. Définissez des animations nommées dans l’éditeur de sprites, puis jouez-les par nom :

player.sprite = Sprite("hero", animation="walk")

Changez d’animation en assignant un nouveau sprite :

player.sprite = Sprite("hero", animation="idle")

Pour les animations à lecture unique, vérifiez la complétion via le composant animation de l’entité :

player.sprite = Sprite("hero", animation="attack", loop=False)

def update():
    if player.animation and player.animation.finished:
        player.sprite = Sprite("hero", animation="idle")

Animation manuelle

Vous pouvez aussi animer manuellement en remplaçant la tile du sprite à chaque frame :

player.sprite = Sprite(
    "atlas",
    tile=(frame * 16, 0, 16, 16)
)

Erreurs courantes

Image manquante

Sprite()
ValueError: Sprite must have an image

Argument image en double

Sprite("hero", image="hero")
TypeError: image specified both positionally and as keyword

Conflit entre tile et animation

Sprite("hero", tile=(0, 0, 16, 16), animation="walk")
TypeError: cannot specify both tile and animation

Animation introuvable

Sprite("hero", animation="fly")
ValueError: Animation 'fly' not found in 'hero'