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
| Valor | Efecto |
|---|---|
1.0 | Vista por defecto |
>1 | Acercar |
<1 | Alejar |
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étodo | Parámetros | Descripción |
|---|---|---|
shake(intensity, duration=8) | intensity en píxeles, duration en fotogramas | Agita 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 fotogramas | Desvanece 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.