pyxen.Camera
Eine Camera definiert, was der Renderer in der Welt sieht.
Sie wird als Komponente an ein Entity angehängt. Der Renderer nutzt die Transform- und Kameraeigenschaften, um die Ansichts- und Projektionsmatrizen zu berechnen.
Eine Welt muss mindestens eine Kamera enthalten, um etwas zu rendern.
Kamera erstellen
camera = world.spawn(
x=0,
y=0,
camera=Camera()
)
Oder nachträglich hinzufügen:
camera = world.spawn()
camera.camera = Camera()
Die Kamera nutzt den Entity-Transform
Eine Kamera speichert keine eigene Position — sie nutzt den Transform des Entity:
camera.x = 100
camera.y = 50
camera.rotation = 30
camera.scale = (2, 2)
Das Bewegen des Entity bewegt die Ansicht. Eltern-Transforms beeinflussen die Kamera ebenfalls.
Eigenschaften
zoom
camera.camera.zoom = 1.0
Typ: float
Standard: 1.0
| Wert | Effekt |
|---|---|
1.0 | Standardansicht |
>1 | Heranzoomen |
<1 | Herauszoomen |
Beispiel:
camera.camera.zoom = 2.0 # heranzoomen
camera.camera.zoom = 0.5 # herauszoomen
Zoom beeinflusst nur die Projektionsmatrix, nicht den Entity-Transform.
Beispiel: Einem Spieler folgen
player = world.spawn(x=0, y=0, sprite=hero)
camera = world.spawn(camera=Camera())
def update():
camera.x = player.x
camera.y = player.y
Oder einfacher — die Kamera als Kind des Spielers setzen:
player = world.spawn(x=0, y=0, sprite=hero)
camera = world.spawn(camera=Camera(), parent=player)
Herausgezoomte Kamera:
camera.camera.zoom = 0.75
Screen Shake & Flash
Eine Kamera kann zwei Bildschirmeffekte anwenden, beide in Frames gemessen (Pyxen läuft mit festen 30 fps):
cam = entity.camera
cam.shake(intensity, duration=8) # jolt the view; fades out over `duration`
cam.flash(color, duration=8) # full-screen colour that fades out
| Methode | Parameter | Beschreibung |
|---|---|---|
shake(intensity, duration=8) | intensity in Pixeln, duration in Frames | Wackelt die Ansicht um einen deterministischen, abklingenden Versatz. |
flash(color, duration=8) | color als Color oder (r, g, b[, a]), duration in Frames | Blendet eine bildschirmfüllende Farbüberlagerung über duration aus. |
def on_hit():
entity.camera.shake(3.0, 10)
entity.camera.flash((1.0, 0.0, 0.0, 0.6), 6)
Beide Effekte sind deterministisch und werden daher im Time-Travel-Debugger identisch wiedergegeben.
Mehrere Kameras
Wenn mehrere Kameras existieren, wird die erste aktive Kamera in der Welt verwendet.