218 lines
4.2 KiB
Markdown
218 lines
4.2 KiB
Markdown
# 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
|
|
|
|
```python
|
|
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)`
|
|
|
|
```python
|
|
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
|
|
|
|
```python
|
|
renderer.reset("Helló világ!")
|
|
```
|
|
|
|
---
|
|
|
|
## `amend(text)`
|
|
|
|
```python
|
|
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
|
|
|
|
```python
|
|
renderer.reset("Helló")
|
|
renderer.amend(" világ!")
|
|
```
|
|
|
|
Eredmény:
|
|
|
|
```text
|
|
Helló világ!
|
|
```
|
|
|
|
---
|
|
|
|
## `type_tick()`
|
|
|
|
```python
|
|
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
|
|
|
|
```python
|
|
bool
|
|
```
|
|
|
|
- `True` - a teljes szöveg feldolgozása befejeződött.
|
|
- `False` - még vannak feldolgozatlan karakterek.
|
|
|
|
### Működés
|
|
|
|
1. Lekéri az aktuális karakterhez tartozó definíciót a `texttable` szótárból.
|
|
2. Ismeretlen karakter esetén a `'?'` definíciót használja.
|
|
3. 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 `sprites` listához.
|
|
4. Ha a megadott szélesség elfogyott:
|
|
- új sorba lép,
|
|
- az Y koordinátát 13 pixellel csökkenti.
|
|
5. Nem látható karakter esetén meghívja a karakter:
|
|
|
|
```python
|
|
display(renderer)
|
|
```
|
|
|
|
metódusát.
|
|
|
|
### Példa
|
|
|
|
```python
|
|
while not renderer.type_tick():
|
|
pass
|
|
```
|
|
|
|
---
|
|
|
|
## `type_all()`
|
|
|
|
```python
|
|
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
|
|
|
|
```python
|
|
renderer.reset("Szia!")
|
|
renderer.type_all()
|
|
```
|
|
|
|
A teljes szöveg egyetlen frame alatt elkészül.
|
|
|
|
---
|
|
|
|
## `render()`
|
|
|
|
```python
|
|
render()
|
|
```
|
|
|
|
Kirajzolja az összes létrehozott karaktersprite-ot.
|
|
|
|
### Működés
|
|
|
|
A `sprites` listán végighaladva minden karakterhez meghívja:
|
|
|
|
```python
|
|
arcade.draw_texture_rect()
|
|
```
|
|
|
|
függvényt pixelpontos (`pixelated=True`) rendereléssel.
|
|
|
|
### Példa
|
|
|
|
```python
|
|
def on_draw(self):
|
|
arcade.start_render()
|
|
renderer.render()
|
|
```
|
|
|
|
---
|
|
|
|
# Tipikus használat
|
|
|
|
## Gépelési effekt
|
|
|
|
```python
|
|
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
|
|
|
|
```python
|
|
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 `Sprite` objektumot 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 `width` túllépésekor történik.
|
|
- Speciális vezérlőkarakterek létrehozhatók `visible=False` karakterdefiníciókkal.
|
|
- Ezek a karakterek tetszőleges működést valósíthatnak meg a `display(renderer)` metóduson keresztül. |