pyxen.Text

Renderiza una cadena de texto en una Entity usando una fuente de mapa de bits.

Las entidades de texto usan un atlas de fuente para el renderizado — cada carácter se dibuja como un quad desde la textura del atlas.


Constructor

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

Parámetros

ParámetroTipoDescripción
contentstrLa cadena de texto a mostrar
fontstrNombre del recurso de fuente (por defecto: fuente integrada)
color(r, g, b, a)Color de tinte (por defecto: blanco)
alignstrAlineación del texto: "left", "center" o "right"

content (Requerido)

La cadena de texto a renderizar.

Text("Hello World")

font (Opcional)

Nombre del recurso de fuente a usar. Si se omite, se usa la fuente integrada por defecto.

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

Un recurso de fuente consiste en un descriptor .font.json y una imagen de atlas .font.png.


color (Opcional)

Tiñe el texto renderizado.

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

Por defecto: (1.0, 1.0, 1.0, 1.0) (blanco, completamente opaco).


align (Opcional)

Controla la alineación horizontal del texto relativa a la posición de la entidad.

Text("Centered", align="center")
ValorDescripción
"left"El texto comienza en la posición de la entidad (por defecto)
"center"El texto se centra en la posición de la entidad
"right"El texto termina en la posición de la entidad

Asignar Text

Puedes asignarlo durante el spawn:

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

O después:

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

Actualizar Text en tiempo de ejecución

Accede al componente de texto a través de la entidad para actualizar propiedades:

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

Desvanecer y teñir

El alpha, r, g y b de una entidad de texto se animan como los de un sprite (consulta entity.tween()): una puntuación que salta se desvanece sin cambiar text.color en cada frame:

label.tween("alpha", to=0, duration=0.4, delay=0.3)  # la puntuación se desvanece, tras un momento
label.tween("b", to=0, duration=0.2)                 # el blanco se vuelve amarillo

Eliminar Text

Asigna None al texto para eliminarlo:

label.text = None

En la pantalla o en el mundo

Una entidad de texto está en el mundo, como un sprite: la cámara la mueve y su zoom la escala. Para un HUD que se queda en la pantalla (una puntuación, las vidas, un mensaje), crea el texto como hijo de la cámara: su x y su y se miden entonces desde el centro de la pantalla, y no se mueve cuando la cámara se mueve.

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

Ejemplo

El ejemplo guarda la puntuación en un componente de la etiqueta, no en una variable del módulo.

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)