You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Phaser 3:启用睡眠事件后静态方块异常问题求助

解决方案

核心思路是初始时关闭方块的重力而非设置为静态,这样既避免方块自动下落,又能保证它处于动态状态(不会直接进入睡眠),点击后再恢复重力让其下落,同时正常监听睡眠事件。

修改关键代码:

  1. 调整方块初始化逻辑:
const startRound = () => {
  background.setInteractive();
  
  block = this.matter.add.image(300, blockPositionTop, 'block')
    .setOrigin(.5, .5)
    .setBounce(0)
    .setMass(10)
    .setGravity(0, 0); // 关闭重力,替代setStatic(true)
  block.setSleepEvents(true, true);
}
  1. 更新enableGravity函数,恢复重力:
const enableGravity = () => {
  background.disableInteractive();
  block.setGravity(0, 1); // 恢复y轴重力,让方块下落
}

为什么这样有效:

  • 静态物体(setStatic(true))在Matter.js中会被标记为睡眠状态,因为它们不需要物理模拟,所以无法通过setStatic(false)唤醒后正常下落。
  • 关闭重力的动态物体,既不会受重力影响自动下落,又保持动态属性,只有当它因碰撞或外力静止一段时间后才会进入睡眠,完美匹配需求:点击前静止,点击后下落,下落静止后触发睡眠事件开启下一轮。

可选优化(如果睡眠触发不灵敏):

可以调整Matter的睡眠参数,设置方块的睡眠阈值,确保静止后快速触发事件:

block.setSleepThreshold(0.01); // 降低睡眠触发的阈值,让静止更快触发睡眠

内容的提问来源于stack exchange,提问作者Wiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:25:09