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

Phaser Time Event无法循环求助:游戏计时器仅执行一次

问题解决:计时器仅执行一次的原因及修复

核心问题

你在创建时间事件时犯了一个关键错误:callback: self.updateTimer() 这行代码里,updateTimer() 是直接调用函数,而不是传递函数引用。这会导致场景启动时立刻执行一次updateTimer,之后因为callback的值是undefined(函数无返回值),循环事件不会再触发。

修复代码

把callback的赋值改成传递函数本身(去掉括号):

create: function(){
        const self = this
        self.startTime = new Date();
        self.totalTime = 120;
        self.timeElapsed = 0;
        self.createTimer();
        // 修复:去掉updateTimer后面的括号,传递函数引用
        self.gameTimer = this.time.addEvent({
            delay: 100,
            callback: self.updateTimer,
            callbackScope: self,
            loop: true
        });
}

额外优化建议

  1. 倒计时逻辑修正:当前代码计算的是已流逝时间,如果需要从120秒倒计时,应该用剩余时间 = 总时间 - 已流逝时间,修改updateTimer里的显示逻辑:
updateTimer: function(){
        var me = this;
        var currentTime = new Date();
        var timeDifference = currentTime.getTime() - me.startTime.getTime();
        me.timeElapsed = Math.floor(timeDifference / 1000);
        // 计算剩余时间,避免出现负数
        var timeLeft = Math.max(me.totalTime - me.timeElapsed, 0);
        var minutes = Math.floor(timeLeft / 60);
        var seconds = timeLeft - (60 * minutes);
        var result = (minutes < 10) ? "0" + minutes : minutes;
        result += (seconds < 10) ? ":0" + seconds : ":" + seconds;
        me.timeLabel.text = result;

        // 时间耗尽后停止计时器
        if(timeLeft === 0){
            me.gameTimer.remove();
        }
}
  1. 控制启动时机:如果需要在游玩阶段开始才启动计时器,不要在create里直接创建事件,而是写一个启动方法:
create: function(){
        const self = this
        self.totalTime = 120;
        self.timeElapsed = 0;
        self.createTimer();
        // 先不启动计时器
},

// 游玩阶段开始时调用此方法
startTimer: function(){
        const self = this;
        self.startTime = new Date();
        self.gameTimer = this.time.addEvent({
            delay: 100,
            callback: self.updateTimer,
            callbackScope: self,
            loop: true
        });
}

比如在玩家点击开始按钮、开场动画结束等触发游玩开始的时机,调用this.startTimer()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:03:22