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

Adobe Animate用Actionscript3开发填字游戏遇Error#1009报错求助

报错原因

你遇到的Error #1009空对象引用错误是AS3中非常常见的报错,结合你的场景和代码,触发原因是以下两个中的一个或多个:

  1. ENTER_FRAME事件执行时机早于场景内文本框加载完成:你在进入游戏场景后立刻给stage加了帧频事件,此时场景上的hypoH、hrsO这类输入文本组件可能还没被Animate渲染完成,直接访问.text属性就会触发空对象报错
  2. 文本框实例名拼写错误/不存在:代码里引用的某一个文本框的实例名和你Animate舞台上设置的实例名不一致,或者这个文本框根本没放在当前游戏帧的舞台上,访问的时候就是null,触发报错
  3. 额外提示:你原有代码里octopus的判断逻辑写了octO2.text == ("0").toString(),这里是数字0不是字母o,如果是要匹配字母o本身逻辑也有误,但这不是触发1009报错的原因。

修复步骤

  • 第一步:给entFrame函数加空对象拦截,判断所有要用到的组件都存在再执行逻辑,同时跳转到游戏场景的时候延迟1帧再加帧频事件,保证元素加载完成,修改后的代码如下:
stop();
quitbtn.addEventListener(MouseEvent.CLICK, quitt);
function quitt(evt: MouseEvent): void {
    // 跳转前先移除帧频事件,避免离开场景后事件还在执行访问不存在的对象
    if(stage.hasEventListener(Event.ENTER_FRAME)){
        stage.removeEventListener(Event.ENTER_FRAME, entFrame);
    }
    gotoAndStop("start");
}


var hippopotamus: Number = 0;
var horse: Number = 0;
var eel: Number = 0;
var frog: Number = 0;
var ant: Number = 0;
var turtle: Number = 0;
var tiger: Number = 0;
var bird: Number = 0;
var penguin: Number = 0;
var orca: Number = 0;
var octopus: Number = 0;
var owl: Number = 0;
var snail: Number = 0;
var duck: Number = 0;
var kangaroo: Number = 0;
var iguana: Number = 0;
var ALLwords:Number = 0;
var Total:Number = 0;

// 延迟1帧再加帧频事件,保证舞台元素加载完成
setTimeout(addFrameEvent, 10);
function addFrameEvent():void{
    stage.addEventListener(Event.ENTER_FRAME, entFrame);
}

function entFrame(evt:Event):void {
    // 先判断最末尾要用到的incorrectTXT存在,不存在就直接返回不执行
    if(!incorrectTXT) return;
    
    // 每个判断都先加文本框存在的判断
    if (hypoH && hypo1 && hypoP && hypoP2 && hypoO && hypoP3 && hypoO2 && hypoT && hypoA && hypoM && hypoU && hypoS 
    && hypoH.text == "h" 
    && hypo1.text == "i" 
    && hypoP.text == "p" 
    && hypoP2.text == "p" 
    && hypoO.text == "o" 
    && hypoP3.text == "p"
    && hypoO2.text == "o" 
    && hypoT.text == "t" 
    && hypoA.text == "a" 
    && hypoM.text == "m" 
    && hypoU.text == "u" 
    && hypoS.text == "s") 
    {
        hippopotamus = 1;
        trace("hippopotamus");
    }

    if (hrsO && hrsR && hrsS && hrsE 
    && hrsO.text == "o" 
    && hrsR.text == "r" 
    && hrsS.text == "s" 
    && hrsE.text == "e") 
    {
        horse = 1;
        trace("horse");
    }

    if (eelE && eel1 
    && eelE.text == "e" 
    && eel1.text == "l") 
    {
        eel = 1;
        trace("eel");
    }

    if (penP && penE && penN && penG && penU && pen1 && penN2 
    && penP.text == "p" 
    && penE.text == "e" 
    && penN.text == "n" 
    && penG.text == "g" 
    && penU.text == "u" 
    && pen1.text == "i" 
    && penN2.text == "n") 
    {
        penguin = 1;
        trace("penguin");
    }

    if (brdB && brdR && brdD 
    && brdB.text == "b" 
    && brdR.text == "r" 
    && brdD.text == "d") 
    {
        bird = 1;
        trace("bird");
    }

    if (octO && octC && octT && octO2 && octP && octU 
    && octO.text == "o" 
    && octC.text == "c" 
    && octT.text == "t" 
    && octO2.text == "o" // 这里原来写的是数字0,已改成字母o,如果你确实要匹配数字0就改回去
    && octP.text == "p" 
    && octU.text == "u") 
    {
        octopus = 1;
        trace("octopus");
    }

    if (orcR && orcC && orcA 
    && orcR.text == "r" 
    && orcC.text == "c" 
    && orcA.text == "a") 
    {
        orca = 1;
        trace("orca");
    }

    if (owlO && owlW 
    && owlO.text == "o" 
    && owlW.text == "w") 
    {
        owl = 1;
        trace("owl");
    }

    if (nailS && nailA && nail1 && nailL 
    && nailS.text == "s" 
    && nailA.text == "a" 
    && nail1.text == "i" 
    && nailL.text == "l") 
    {
        snail = 1;
        trace("snail");
    }

    if (dkD && dkU && dkC && dkK 
    && dkD.text == "d" 
    && dkU.text == "u" 
    && dkC.text == "c" 
    && dkK.text == "k") 
    {
        duck = 1;
        trace("duck");
    }

    if (groA && groN && groG && groA2 && groR && groO 
    && groA.text == "a" 
    && groN.text == "n" 
    && groG.text == "g" 
    && groA2.text == "a" 
    && groR.text == "r" 
    && groO.text == "o") 
    {
        kangaroo = 1;
        trace("kangaroo");
    }

    if (frgF && frgR && frgG 
    && frgF.text == "f" 
    && frgR.text == "r" 
    && frgG.text == "g") 
    {
        frog = 1;
        trace("frog");
    }

    if (ignG && ignU && ignA && ignN 
    && ignG.text == "g" 
    && ignU.text == "u" 
    && ignA.text == "a" 
    && ignN.text == "n") 
    {
        iguana = 1;
        trace("iguana");
    }

    if (antA && antN 
    && antA.text == "a" 
    && antN.text == "n") 
    {
        ant = 1;
        trace("ant");
    }

    if (trtT && trtU && trtR && trtT2 && trtL 
    && trtT.text == "t" 
    && trtU.text == "u" 
    && trtR.text == "r" 
    && trtT2.text == "t" 
    && trtL.text == "l") 
    {
        turtle = 1;
        trace("turtle");
    }

    if (tgr1 && tgrG && tgrE 
    && tgr1.text == "i" 
    && tgrG.text == "g" 
    && tgrE.text == "e") 
    {
        tiger = 1;
        trace("tiger");
    }

    ALLwords = hippopotamus + horse + eel + frog + tiger + octopus + penguin + bird + orca + turtle + duck + snail + ant + kangaroo + iguana + owl;
    Total = 16 - ALLwords;
    if (Total == 0) 
    {
        // 游戏结束后记得移除事件,避免重复执行
        stage.removeEventListener(Event.ENTER_FRAME, entFrame);
        trace("Gameover");
    }
    
    incorrectTXT.text = "you have" + Total + " incorrect words remaining";          
}
  • 第二步:如果加了拦截之后还是报错,就逐行核对代码里的文本框实例名和你Animate舞台上的实例名,确保大小写、拼写完全一致,所有用到的文本框都放在游戏场景的当前帧上,没有被放在其他图层或者其他帧里。
  • 第三步:跳转离开游戏场景的时候一定要先移除ENTER_FRAME事件,不然离开场景后事件还在执行,访问已经不存在的文本框也会触发1009报错,上面的代码里已经在quit按钮的点击事件里加了移除逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:45:04