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

Phaser 3如何解决场景指定次数循环跳转失效问题

问题

在Phaser场景开发中编写如下逻辑,预期实现按指定次数间隔跳转回scene1的效果,但实际for循环未按预期运行,场景出现无限循环跳转:

for (var i = 0; i < 5; i++) {
  this.time.addEvent({
    delay: 300,
    loop: false,
    callback: () => {
      this.scene.start("scene1");
    }
  })
}
问题根源

代码存在两个核心问题:

  • for循环是同步执行逻辑,会一次性向Phaser时间系统注册5个延迟300ms触发的事件,这5个事件会在300ms后几乎同时执行,完全不符合“间隔300ms跳转一次、总共跳转5次”的预期。
  • 每次执行this.scene.start("scene1")切换场景时,如果后续流程会再次回到承载这段代码的场景,这段注册事件的逻辑会被重新执行,不断新增定时跳转任务,最终形成无限循环。
修正方案

不需要手写for循环批量注册事件,直接使用Phaser Time模块原生的重复触发参数控制执行次数,同时增加防重复注册标记即可:

// 防重复注册标记,避免场景重启后反复新增跳转事件
if (!this.hasBindJumpEvent) {
  this.hasBindJumpEvent = true;
  this.time.addEvent({
    delay: 300, // 第一次触发的延迟时长
    repeat: 4, // 重复触发次数,总触发次数 = repeat + 1,设置为4即总共触发5次
    repeatDelay: 300, // 每次重复触发的间隔时长
    callback: () => {
      this.scene.start("scene1");
    }
  })
}

额外注意事项

  • 开发Phaser项目时尽量使用let/const声明变量,不要用var,避免变量提升带来的作用域异常。
  • 如果跳转逻辑仅在特定流程下生效,可以监听场景的shutdown事件,在场景销毁时主动移除相关定时事件,避免残留定时器触发异常跳转。

内容的提问来源于stack exchange,提问作者Ng Jia Yong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:09:22