pyxen.Camera

Una Camera define lo que el renderizador ve en el mundo.

Se adjunta a una entidad como componente. El renderizador usa la transformación y las propiedades de la cámara para calcular las matrices de vista y proyección.

Un mundo debe contener al menos una cámara para renderizar algo.


Crear una Camera

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

O añadirla después:

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

La Camera usa la transformación de la entidad

Una cámara no almacena posición por sí misma — usa la transformación de la entidad:

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

Mover la entidad mueve la vista. Las transformaciones del padre también afectan a la cámara.


Propiedades

zoom

camera.camera.zoom = 1.0

Tipo: float Por defecto: 1.0

ValorEfecto
1.0Vista por defecto
>1Acercar
<1Alejar

Ejemplo:

camera.camera.zoom = 2.0  # acercar
camera.camera.zoom = 0.5  # alejar

El zoom afecta solo a la matriz de proyección, no a la transformación de la entidad.


Ejemplo: seguir a un jugador

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

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

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

O más simple, establecer el padre de la cámara como el jugador:

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

Cámara alejada:

camera.camera.zoom = 0.75

Sacudida y destello de pantalla

Una cámara puede aplicar dos efectos de pantalla, ambos medidos en fotogramas (Pyxen funciona a 30 fps fijos):

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étodoParámetrosDescripción
shake(intensity, duration=8)intensity en píxeles, duration en fotogramasAgita la vista con un desplazamiento determinista que decae con el tiempo.
flash(color, duration=8)color como Color o (r, g, b[, a]), duration en fotogramasDesvanece una superposición de color a pantalla completa a lo largo de duration.
def on_hit():
    entity.camera.shake(3.0, 10)
    entity.camera.flash((1.0, 0.0, 0.0, 0.6), 6)

Ambos efectos son deterministas, así que se reproducen de forma idéntica en el depurador de viaje en el tiempo.


Múltiples cámaras

Si existen múltiples cámaras, se usa la primera cámara activa encontrada en el mundo.