pyxen.Camera

Une Camera définit ce que le moteur de rendu voit dans le monde.

Elle est attachée à une entité en tant que composant. Le moteur de rendu utilise le transform et les propriétés de la caméra pour calculer les matrices de vue et de projection.

Un monde doit contenir au moins une caméra pour afficher quoi que ce soit.


Créer une Camera

camera = world.spawn(
    x=0,
    y=0,
    camera=Camera()
)

Ou ajoutée plus tard :

camera = world.spawn()
camera.camera = Camera()

La Camera utilise le Transform de l’entité

Une caméra ne stocke pas sa propre position — elle utilise le transform de l’entité :

camera.x = 100
camera.y = 50
camera.rotation = 30
camera.scale = (2, 2)

Déplacer l’entité déplace la vue. Les transforms parents affectent également la caméra.


Propriétés

zoom

camera.camera.zoom = 1.0

Type : float Défaut : 1.0

ValeurEffet
1.0Vue par défaut
>1Zoom avant
<1Zoom arrière

Exemple :

camera.camera.zoom = 2.0  # zoom in
camera.camera.zoom = 0.5  # zoom out

Le zoom n’affecte que la matrice de projection, pas le transform de l’entité.


Exemple : Suivre un joueur

player = world.spawn(x=0, y=0, sprite=hero)

camera = world.spawn(camera=Camera())

def update():
    camera.x = player.x
    camera.y = player.y

Ou plus simplement, définir le parent de la caméra comme étant le joueur :

player = world.spawn(x=0, y=0, sprite=hero)
camera = world.spawn(camera=Camera(), parent=player)

Caméra avec zoom arrière :

camera.camera.zoom = 0.75

Secousse & flash d’écran

Une caméra peut appliquer deux effets d’écran, tous deux mesurés en frames (Pyxen tourne à 30 fps fixes) :

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
MéthodeParamètresDescription
shake(intensity, duration=8)intensity en pixels, duration en framesFait trembler la vue selon un décalage déterministe et décroissant.
flash(color, duration=8)color sous forme de Color ou (r, g, b[, a]), duration en framesEstompe une superposition de couleur plein écran sur duration.
def on_hit():
    entity.camera.shake(3.0, 10)
    entity.camera.flash((1.0, 0.0, 0.0, 0.6), 6)

Les deux effets sont déterministes, ils se rejouent donc à l’identique dans le débogueur à voyage temporel.


Caméras multiples

Si plusieurs caméras existent, la première caméra active trouvée dans le monde est utilisée.