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)
두 효과 모두 결정론적이므로, 타임 트래블 디버거에서 동일하게 재생됩니다.
다중 카메라
여러 카메라가 존재하면, 월드에서 찾은 첫 번째 활성 카메라가 사용됩니다.