Phaser 3任务状态切换问题:需替换talkCount触发doctorQuest为complete的逻辑
解决Phaser 3任务状态跳转跳过对话的问题
当前问题出在complete状态的触发逻辑上——用累计对话次数talkCount >=4来触发,会导致玩家在found状态下多次对话时直接跳过该状态的对话内容,直接切换到complete。
解决方案思路
放弃用对话次数作为complete状态的触发条件,改为仅当任务处于found状态时,玩家完成一次对话(触发T键交互)后,才将状态切换为complete。这样能确保玩家必须在found状态下至少进行一次对话,才会进入最终完成状态。
修改后的核心代码
首先调整状态切换逻辑,移除基于talkCount的complete触发:
if (this.talkCount == 2){ doctorQuest = "active"; } // 收集齐物品且任务处于激活状态时,切换到found if (this.has("medBag") && this.has("stephascope") && this.has("shot") && doctorQuest == "active"){ doctorQuest = "found"; } // 移除原有的talkCount >=4触发complete的代码
然后修改对话触发的逻辑,在交互时判断当前任务状态:
if ((this.checkCollision(this.p1, this.curie) && Phaser.Input.Keyboard.JustDown(this.keyT))) { this.talking = !this.talking; // 仅当当前任务处于found状态时,完成本次对话后切换为complete if (doctorQuest === "found") { doctorQuest = "complete"; } // 如果talkCount还有其他业务用途则保留,否则可考虑删除 this.talkCount += 1; }
额外优化建议
如果需要更严谨的流程(比如确保玩家看完found状态的对话内容后才切换状态),可以结合对话窗口的关闭事件来触发complete状态的切换,而不是在按下T键时立刻切换。比如在对话窗口关闭的回调里判断当前状态是found,再设置为complete。
内容的提问来源于stack exchange,提问作者EmptyStone
相关产品推荐
相关产品推荐

