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

Phaser 3游戏分数达标时触碰门未触发floor2函数问题咨询

问题原因

  • 门对象未添加物理属性:你使用this.add.image创建的门只是普通渲染元素,没有物理碰撞盒,Phaser的物理重叠检测无法识别该对象。
  • create函数参数覆盖全局分数:你给create函数声明了score参数,但Phaser初始化场景调用create时不会传入分数值,该参数值为undefined,写在create中的if(score >= 10)判断永远不会成立,重叠检测代码根本没有执行。
  • 重叠回调写法错误:你写的this.physics.add.overlap(player,door,floor2(score))会在代码执行到这一行时就直接调用floor2函数,而不是将它作为碰撞触发时的回调传入;同时没有绑定this指向,就算后续触发回调,floor2中的this会指向全局对象,调用this.physics会直接报错。
  • 分数判断时机错误:create函数只会在场景初始化时执行一次,此时玩家还未收集星星,分数初始为0,就算后续分数涨到10分以上,也不会重新执行判断添加碰撞检测。

修改方案

你可以按照以下步骤调整代码:

  1. 调整门的创建代码,给门添加静态物理体:
// 把原来的 door = this.add.image(50,550,'door'); 替换为下面的代码
door = this.physics.add.staticImage(50,550,'door');
  1. 去掉create函数的score参数,避免覆盖全局分数变量:
// 把原来的 function create (score) 改为
function create ()
  1. 删除create中原来的分数判断加碰撞的代码,直接添加重叠检测,在回调中判断分数:
// 删掉原来的if (score >= 10) {...} 代码块,替换为下面的代码
this.physics.add.overlap(player,door, function() {
  if(score >= 10) {
    floor2.call(this);
  }
}, null, this);
  1. floor2函数不需要额外传score参数,直接读取全局的score变量即可,不需要做修改。

修改后你再运行游戏,当分数≥10时触碰门就会触发floor2的通关逻辑了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:54:02