pyxen.Camera
Cameraはレンダラーがワールド内で何を表示するかを定義します。
コンポーネントとしてエンティティにアタッチされます。レンダラーはカメラのトランスフォームとプロパティを使用して、ビュー行列とプロジェクション行列を計算します。
何かを描画するには、ワールドに少なくとも1つのカメラが必要です。
カメラの作成
camera = world.spawn(
x=0,
y=0,
camera=Camera()
)
または後から追加:
camera = world.spawn()
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
スクリーンシェイク&フラッシュ
カメラは2つの画面エフェクトを適用できます。どちらもフレーム単位で指定します(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)
どちらのエフェクトも決定的なので、タイムトラベルデバッガで同一に再生されます。
複数のカメラ
複数のカメラが存在する場合、ワールド内で最初に見つかったアクティブなカメラが使用されます。