4.2 KiB
TextRenderer
A TextRenderer osztály egy egyszerű, karakterenként gépelődő (typewriter effektusú) szövegmegjelenítő. A szöveget sprite-okként tárolja és rendereli, támogatja a sortörést meghatározott szélesség esetén, valamint speciális karakterek kezelését egyedi display() függvényeken keresztül.
Konstruktor
TextRenderer(x, y, width=None)
Új szövegmegjelenítőt hoz létre.
Paraméterek
x(int) - A szöveg kezdő X koordinátája.y(int) - A szöveg kezdő Y koordinátája.width(int | None) - Opcionális maximális szélesség pixelekben. Túllépés esetén automatikus sortörés történik.
Attribútumok
sprites- A renderelendő karaktersprite-ok listája.base_x- Kezdő X koordináta.base_y- Kezdő Y koordináta.width- Maximális szövegszélesség.text- A megjelenítendő szöveg.textptr- Az aktuálisan feldolgozott karakter indexe.x- Aktuális rajzolási pozíció X tengelyen.y- Aktuális rajzolási pozíció Y tengelyen.
reset(text)
reset(text)
Visszaállítja a renderelőt alapállapotba, és új szöveget tölt be.
Paraméterek
text(str) - A megjelenítendő szöveg.
Működés
- Törli az összes korábbi sprite-ot.
- Visszaállítja a rajzolási pozíciót a kezdőkoordinátákra.
- Nullázza a karaktermutatót (
textptr).
Példa
renderer.reset("Helló világ!")
amend(text)
amend(text)
Hozzáfűz további szöveget a már meglévő szöveghez.
Paraméterek
text(str) - A hozzáfűzendő szöveg.
Példa
renderer.reset("Helló")
renderer.amend(" világ!")
Eredmény:
Helló világ!
type_tick()
type_tick()
Egyetlen karakter feldolgozását végzi el. A függvény elsősorban gépelési animációk megvalósítására használható.
Visszatérési érték
bool
True- a teljes szöveg feldolgozása befejeződött.False- még vannak feldolgozatlan karakterek.
Működés
- Lekéri az aktuális karakterhez tartozó definíciót a
texttableszótárból. - Ismeretlen karakter esetén a
'?'definíciót használja. - Látható karakter esetén:
- kivágja a megfelelő textúrát a font atlaszból,
- létrehozza a sprite adatait,
- hozzáadja azokat a
spriteslistához.
- Ha a megadott szélesség elfogyott:
- új sorba lép,
- az Y koordinátát 13 pixellel csökkenti.
- Nem látható karakter esetén meghívja a karakter:
display(renderer)
metódusát.
Példa
while not renderer.type_tick():
pass
type_all()
type_all()
A teljes szöveget azonnal feldolgozza.
Működés
A type_tick() függvényt hívja ismételten addig, amíg minden karakter feldolgozásra nem kerül.
Példa
renderer.reset("Szia!")
renderer.type_all()
A teljes szöveg egyetlen frame alatt elkészül.
render()
render()
Kirajzolja az összes létrehozott karaktersprite-ot.
Működés
A sprites listán végighaladva minden karakterhez meghívja:
arcade.draw_texture_rect()
függvényt pixelpontos (pixelated=True) rendereléssel.
Példa
def on_draw(self):
arcade.start_render()
renderer.render()
Tipikus használat
Gépelési effekt
renderer = TextRenderer(10, 100, width=200)
renderer.reset(
"Ez egy hosszabb szöveg, amely több sorba törhet."
)
renderer.type_tick()
renderer.render()
Azonnali megjelenítés
renderer = TextRenderer(10, 100)
renderer.reset("Helló világ!")
renderer.type_all()
renderer.render()
Megjegyzések
- Az osztály nem hoz létre külön
Spriteobjektumot minden karakterhez, hanem csak a szükséges textúrát és pozíciót tárolja. - Ismeretlen karakter esetén automatikusan a
'?'karakter kerül megjelenítésre. - A sortörés kizárólag a megadott
widthtúllépésekor történik. - Speciális vezérlőkarakterek létrehozhatók
visible=Falsekarakterdefiníciókkal. - Ezek a karakterek tetszőleges működést valósíthatnak meg a
display(renderer)metóduson keresztül.