Phaser 3 Arcade 物理引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/phaser-arcade-physics-rf29 到 AI 助手。
技能介绍
这个技能解决什么问题
在 Phaser 3 里做平台跳跃或俯视角移动时,开发者常陷入两难:自己手写碰撞检测容易漏边、卡墙,而引入 Matter 这类重型引擎又让项目体积和复杂度陡增。Arcade Physics 是 Phaser 内置的轻量引擎,专为 AABB 矩形和圆形体素设计,适合大多数 2D 街机类游戏的移动与碰撞需求。本技能提供从世界配置到碰撞检测的完整操作路径,帮你绕开手动积分位置、帧率无关性、碰撞类别等常见坑。
它的核心能力与关键步骤
1. 启用物理世界:在 Game 或 Scene 配置中设置 physics: { default: 'arcade', arcade: { gravity: {...}, debug: true } },debug 模式可在开发期显示刚体轮廓与速度向量。
2. 创建刚体:动态精灵用 this.physics.add.sprite(...),静态平台用 this.physics.add.staticImage(...),已有对象用 this.physics.add.existing(obj) 挂载。
3. 通过身体驱动位移:用 setVelocity、setAcceleration、gravity、setBounce、setCollideWorldBounds 控制运动,引擎每步自动积分位置,天然帧率无关;直接写 sprite.x 会与引擎冲突并导致穿墙。
4. 处理交互:this.physics.add.collider(a, b) 分离刚体,this.physics.add.overlap(a, b, cb) 仅检测不分离,适合拾取与触发器。
5. 批量管理:this.physics.add.group() 与 staticGroup() 让一次 collider 调用覆盖整组成员。
适用边界与注意点
- 不适用于:Game 配置、场景结构、资源加载、相机控制——这些属于 phaser-core 范畴;铰链、弹簧、复杂多边形、堆叠刚体应换用 Matter 引擎,Arcade 与 Matter 刚体互不交互。
- 手感调优(固定步长、隧穿、抖动)应参考 physics-tuning 技能。
- 常见陷阱:用
this.add.sprite而非this.physics.add.sprite会导致精灵无刚体;对角线速度比单轴更快,需归一化向量;静态刚体移动后需调用body.updateFromGameObject()同步碰撞数据;collider 应在create中注册一次而非每帧重复注册。
使用场景
- 为俯视角射击游戏的角色添加键盘输入移动,需要设置速度、加速度与世界边界反弹。
- 制作平台跳跃游戏,角色受重力下落,落地后用 body.onFloor() 判定通过才能起跳。
- 实现道具拾取:玩家碰到金币用 overlap 只触发得分回调不分离,碰到敌人则用 collider 推开。
- 制作可移动平台时防止玩家踩上去把平台压沉,需要用 staticGroup 或 setImmovable(true)。
适合人员
- 独立游戏开发者,正在用 Phaser 3 做 2D 平台跳跃,需要给主角加重力、落地判定和起跳逻辑。
- 小游戏团队的客户端程序员,负责俯视角玩法的移动手感,需要处理速度向量、对角线归一化和碰撞推开。
- HTML5 游戏初学者,已会画精灵和加载贴图,现在想让画面里的物体真正能移动、弹跳并相互碰撞。
- 讲授游戏物理课程的讲师,想找一套 Arcade 引擎的最小可复现示例来讲解刚体积分与碰撞分离。