pyxen.Text

Rendert einen Textstring auf einem Entity unter Verwendung einer Bitmap-Schriftart.

Text-Entities verwenden einen Schrift-Atlas zum Rendern — jedes Zeichen wird als Quad aus der Atlas-Textur gezeichnet.


Konstruktor

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

Parameter

ParameterTypBeschreibung
contentstrDer anzuzeigende Textstring
fontstrName des Schrift-Assets (Standard: eingebaute Schriftart)
color(r, g, b, a)Einfärbefarbe (Standard: Weiß)
alignstrTextausrichtung: "left", "center" oder "right"

content (Erforderlich)

Der zu rendernde Textstring.

Text("Hello World")

font (Optional)

Name des zu verwendenden Schrift-Assets. Wenn weggelassen, wird die eingebaute Standardschrift verwendet.

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

Ein Schrift-Asset besteht aus einem .font.json-Deskriptor und einem .font.png-Atlasbild.


color (Optional)

Färbt den gerenderten Text ein.

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

Standard: (1.0, 1.0, 1.0, 1.0) (Weiß, vollständig deckend).


align (Optional)

Steuert die horizontale Textausrichtung relativ zur Entity-Position.

Text("Centered", align="center")
WertBeschreibung
"left"Text beginnt an der Entity-Position (Standard)
"center"Text ist zentriert auf der Entity-Position
"right"Text endet an der Entity-Position

Text zuweisen

Du kannst beim Erstellen zuweisen:

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

Oder nachträglich:

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

Text zur Laufzeit aktualisieren

Greife über das Entity auf die Text-Komponente zu, um Eigenschaften zu ändern:

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

Ausblenden und Einfärben

alpha, r, g und b einer Text-Entität lassen sich wie bei einem Sprite tweenen (siehe entity.tween()): Ein aufpoppender Punktestand blendet aus, ohne jeden Frame text.color zu setzen:

label.tween("alpha", to=0, duration=0.4, delay=0.3)  # der Punktestand blendet nach kurzem aus
label.tween("b", to=0, duration=0.2)                 # Weiß wird Gelb

Text entfernen

Setze den Text auf None, um ihn zu entfernen:

label.text = None

Auf dem Bildschirm oder in der Welt

Eine Text-Entity liegt in der Welt, wie ein Sprite: Die Kamera verschiebt sie und ihr Zoom skaliert sie. Für ein HUD, das auf dem Bildschirm bleibt (Punkte, Leben, eine Meldung), erzeugst du den Text als Kind der Kamera: Sein x und y werden dann von der Bildschirmmitte aus gemessen, und er bleibt stehen, wenn sich die Kamera bewegt.

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

Beispiel

Das Beispiel speichert die Punkte in einer Komponente des Labels, nicht in einer Modulvariablen.

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)