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

AS3实现倒计时器报TypeError #1034类型转换错误如何解决

错误产生原因
  • 事件类型不匹配是触发报错的直接原因:你监听的是Event.ENTER_FRAME帧频事件,该事件触发时只会向处理函数传递基础Event类型的实例,但你定义的countTimer处理函数参数声明为TimerEvent类型,Flash运行时无法将通用Event对象强制转换为TimerEvent子类实例,因此抛出#1034类型强制转换失败错误。
  • 代码中还存在3处会导致倒计时功能异常的逻辑问题:
    • 初始化时间显示时把分、秒的变量赋值写反,会导致初始时间显示错乱
    • 秒数借位判断逻辑写反:倒计时是逐秒递减逻辑,秒数减到小于0时才需要向分钟借位,原代码判断Seconds > 59永远不会触发,会导致秒数减到0之后继续显示负数,分钟数不会正常递减
    • 倒计时结束时停止逻辑写的是timer.stop(),和你当前用timerWatch做帧动画倒计时的实例不匹配,会导致动画停不下来
修复方法
  1. 修改事件处理函数的参数类型,将TimerEvent改为匹配ENTER_FRAME事件的Event类型
  2. 修正初始时分、秒文本的赋值对应关系,初始加载时就做补0处理
  3. 修正秒数借位判断逻辑:当秒数减到小于0时,将秒数重置为59,同时分钟数减1
  4. 统一分、秒的补0显示逻辑,避免出现个位数时不补0的显示问题
  5. 修正停止动画的实例对应关系

修复后的完整参考代码:

var goalTimerScore: int =  Math.floor(Math.random() * 101) + 20;
var Minutes:Number = Math.floor(Math.random() * 11);
var Seconds:Number = Math.floor(Math.random() * 60);
// 修正初始赋值对应关系,初始加载即做补0处理
timerMin_txt.text = Minutes < 10 ? "0" + Minutes : String(Minutes);
timerSec_txt.text = Seconds < 10 ? "0" + Seconds : String(Seconds);

timerWatch.addEventListener(Event.ENTER_FRAME, countTimer);
timerWatch.play();

// 修正参数类型为Event,匹配ENTER_FRAME事件的派发类型
function countTimer(e:Event):void {
    if (timerWatch.currentFrame == 61) {
        Seconds--;
        // 修正借位判断:秒数小于0时向分钟借位
        if (Seconds < 0) {
            Seconds = 59;
            Minutes--;
        }
        // 统一处理秒数显示补0
        timerSec_txt.text = Seconds < 10 ? "0" + Seconds : String(Seconds);
        // 统一处理分钟数显示补0
        timerMin_txt.text = Minutes < 10 ? "0" + Minutes : String(Minutes);
        // 判断倒计时结束
        if (Minutes == 0 && Seconds == 0) {
            timerWatch.removeEventListener(Event.ENTER_FRAME, countTimer);
            timerWatch.stop();
            gotoAndPlay("gameover_Hidden3");
            return;
        }
    }
}

注:如果你项目中timer是独立于帧动画的其他定时器实例,可以保留timer.stop()代码,和timerWatch.stop()同时调用即可。


内容的提问来源于stack exchange,提问作者Isaac Yeap Jie Ling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:36:37