pyxen.Text

Affiche une chaîne de texte sur une Entity en utilisant une police bitmap.

Les entités texte utilisent un atlas de police pour le rendu — chaque caractère est dessiné comme un quad à partir de la texture de l’atlas.


Constructeur

Text(
    content,
    *,
    font="_default",
    color=None,
    align="left"
)

Paramètres

ParamètreTypeDescription
contentstrLa chaîne de texte à afficher
fontstrNom de l’asset de police (par défaut : police intégrée)
color(r, g, b, a)Couleur de teinte (par défaut : blanc)
alignstrAlignement du texte : "left", "center" ou "right"

content (Requis)

La chaîne de texte à afficher.

Text("Hello World")

font (Optionnel)

Nom de l’asset de police à utiliser. S’il est omis, la police intégrée par défaut est utilisée.

Text("Score: 0", font="myfont")

Un asset de police se compose d’un descripteur .font.json et d’une image atlas .font.png.


color (Optionnel)

Teinte le texte rendu.

Text("Warning!", color=(1, 0, 0, 1))

Par défaut : (1.0, 1.0, 1.0, 1.0) (blanc, entièrement opaque).


align (Optionnel)

Contrôle l’alignement horizontal du texte par rapport à la position de l’entité.

Text("Centered", align="center")
ValeurDescription
"left"Le texte commence à la position de l’entité (par défaut)
"center"Le texte est centré sur la position de l’entité
"right"Le texte se termine à la position de l’entité

Assigner du texte

Vous pouvez l’assigner lors du spawn :

label = world.spawn(
    text=Text("Score: 0"),
    x=10, y=10, layer=200
)

Ou plus tard :

label.text = Text("Game Over", color=(1, 0, 0, 1))

Mettre à jour le texte en cours de jeu

Accédez au composant texte via l’entité pour modifier ses propriétés :

label.text.content = "Score: 100"
label.text.color = (1, 1, 0, 1)
label.text.align = "center"

Fondu et teinte

Les alpha, r, g et b d’une entité texte s’animent comme ceux d’un sprite (voir entity.tween()) : un score qui surgit s’efface sans régler text.color à chaque frame :

label.tween("alpha", to=0, duration=0.4, delay=0.3)  # le score s'efface, après un instant
label.tween("b", to=0, duration=0.2)                 # le blanc devient jaune

Supprimer le texte

Assignez None au texte pour le supprimer :

label.text = None

À l’écran ou dans le monde

Une entity de texte se trouve dans le monde, comme un sprite : la caméra la déplace et son zoom l’agrandit. Pour un HUD qui reste à l’écran (un score, des vies, un message), créez le texte comme enfant de la caméra : ses x et y se mesurent alors depuis le centre de l’écran, et il reste en place quand la caméra bouge.

cam = world.spawn(camera=Camera())
label = world.spawn(parent=cam, x=-150, y=-80, layer=200, text=Text("Score: 0"))

Exemple

L’exemple garde le score dans un component du label, pas dans une variable du module.

from pyxen import *

def start():
    cam = world.spawn(camera=Camera())
    label = world.spawn(
        parent=cam, x=-150, y=-80, layer=200,
        text=Text("Score: 0", color=(1, 1, 1, 1))
    )
    label.score = {"value": 0}

def update():
    for label in world.all("score"):
        label.score.value += 1
        label.text.content = "Score: " + str(label.score.value)