pyxen.Camera

Camera는 렌더러가 월드에서 보는 것을 정의합니다.

엔티티에 컴포넌트로 첨부됩니다. 렌더러는 카메라의 트랜스폼과 속성을 사용하여 뷰 및 프로젝션 행렬을 계산합니다.

월드에 렌더링할 무언가가 있으려면 최소 하나의 카메라가 있어야 합니다.


Camera 생성

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

또는 나중에 추가:

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

Camera는 엔티티 Transform을 사용

카메라는 자체적으로 위치를 저장하지 않습니다 — 엔티티의 트랜스폼을 사용합니다:

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

엔티티를 이동하면 뷰가 이동합니다. 부모 트랜스폼도 카메라에 영향을 줍니다.


속성

zoom

camera.camera.zoom = 1.0

타입: float 기본값: 1.0

값효과
1.0기본 뷰
>1확대
<1축소

예시:

camera.camera.zoom = 2.0  # 확대
camera.camera.zoom = 0.5  # 축소

줌은 프로젝션 행렬에만 영향을 주며, 엔티티 트랜스폼에는 영향을 주지 않습니다.


예시: 플레이어 따라가기

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

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

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

더 간단하게, 카메라의 부모를 플레이어로 설정합니다:

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

축소된 카메라:

camera.camera.zoom = 0.75

화면 흔들림 & 플래시

카메라는 두 가지 화면 효과를 적용할 수 있으며, 둘 다 프레임 단위로 측정됩니다 (Pyxen은 고정 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
메서드매개변수설명
shake(intensity, duration=8)intensity는 픽셀, duration은 프레임결정론적으로 감쇠하는 오프셋만큼 뷰를 떨리게 합니다.
flash(color, duration=8)color는 Color 또는 (r, g, b[, a]), duration은 프레임전체 화면 색상 오버레이를 duration에 걸쳐 사라지게 합니다.
def on_hit():
    entity.camera.shake(3.0, 10)
    entity.camera.flash((1.0, 0.0, 0.0, 0.6), 6)

두 효과 모두 결정론적이므로, 타임 트래블 디버거에서 동일하게 재생됩니다.


다중 카메라

여러 카메라가 존재하면, 월드에서 찾은 첫 번째 활성 카메라가 사용됩니다.