用途
本技能用于在 Phaser 4 中处理摄像机(Camera)相关功能。它面向需要在游戏场景中控制视角、实现多摄像机布局、镜头跟随与镜头特效的开发者,提供从核心概念到具体 API 的完整说明与代码示例。
主要能力
- CameraManager 管理:每个 Scene 通过
this.cameras访问 CameraManager,可添加、移除、查找、计数、重置摄像机,并支持最多 32 个可使用ignore()排除对象的摄像机。 - 主摄像机:
this.cameras.main指向默认主摄像机,在场景启动、传入makeMain: true或当前主摄像机被移除时自动设置。 - 视口与滚动:视口是画布上的物理矩形,由
setPosition、setSize、setViewport控制;滚动是摄像机在世界中“看向”的位置,由scrollX/scrollY或setScroll控制,两者相互独立。 - 缩放:支持统一缩放与水平/垂直独立缩放,缩放值最小被限制为 0.001。
- 边界:通过
setBounds限制滚动范围,可临时用useBounds = false禁用或removeBounds()移除;边界只限制滚动,不影响视口位置。 - 跟随精灵:
startFollow可跟随任意具有 x、y 属性的对象,支持 lerp 平滑、偏移、死区与停止跟随。 - 摄像机特效:包括淡入淡出(fadeIn/fadeOut/fade/fadeFrom)、闪光(flash)、抖动(shake)、平移(pan)、缩放动画(zoomTo)、旋转动画(rotateTo),均返回 this 支持链式调用,并可通过
resetFX()重置。 - 忽略列表:
ignore()通过更新对象的 cameraFilter 位掩码让摄像机跳过渲染,适用于 HUD 分层。 - 死区:
setDeadzone定义跟随目标周围不滚动的矩形区域。 - 世界坐标转换:
getWorldPoint将屏幕坐标转换为世界坐标,考虑滚动、缩放与旋转。 - 渲染列表:
renderList每帧填充当前摄像机可见的对象。 - 强制离屏合成:
setForceComposite(true)让摄像机渲染到离屏帧缓冲,供 CaptureFrame 等使用。 - 摄像机滤镜(v4):
cam.filters.internal与cam.filters.external两个 FilterList,可添加模糊、发光、颜色矩阵等后处理效果,需 WebGL。 - 键盘控制:提供 FixedKeyControl(固定速度)与 SmoothedKeyControl(带加速度、阻力、最大速度)两种内置控制类,需在 update 中调用
update(delta)。 - 事件:摄像机继承 EventEmitter,可监听淡入淡出、闪光、抖动、平移、缩放、旋转的开始/完成事件,以及 FOLLOW_UPDATE、PRE_RENDER、POST_RENDER、DESTROY 等。
使用方式
在 Scene 的 create() 方法中通过 this.cameras.main 获取默认摄像机,然后调用相应方法,例如 cam.setScroll(200, 100)、cam.centerOn(400, 300)、cam.setZoom(2)、cam.startFollow(player, false, 0.1, 0.1)、cam.setBounds(0, 0, 2048, 2048)、cam.fadeIn(1000)、cam.filters.external.addBlur(1, 2)。多摄像机场景中可用 this.cameras.add(...) 创建小地图或 HUD 摄像机,并用 ignore() 互相排除对象。键盘控制类需在 create() 中实例化,并在 update(time, delta) 中调用其 update(delta)。
适用场景
- 需要滚动、缩放、跟随角色的 2D 游戏视角控制。
- 多摄像机布局,如主视图加小地图、HUD 与游戏世界分层渲染。
- 镜头特效,如受击抖动、场景切换淡入淡出、闪光、平移与缩放动画。
- 需要将屏幕点击转换为世界坐标的交互逻辑。
- 需要为摄像机添加后处理滤镜(WebGL 环境)。
限制
- 摄像机滤镜需要 WebGL,且滤镜激活时摄像机需通过帧缓冲渲染。
- 缩放值不能为 0,最小被限制为 0.001。
- 边界只限制滚动,不阻止对象放置在边界外,也不影响视口位置。
- 已运行的特效不会自动重启,除非传入
force: true。 - 超过 32 个摄像机时,额外摄像机 ID 为 0,无法使用
ignore()排除对象。 - 键盘控制类需要手动在 update 中调用
update(delta)。 - 关于收费、价格、平台等信息,资料中暂未提供。