TypeError:错误#1009 - AS3

时间:2011-03-26 17:54:55

标签: actionscript-3

我收到此错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Lemonade_fla::MainTimeline/frame3()[Lemonade_fla.MainTimeline::frame3:48]

从这段代码中

buy_sugar.addEventListener(MouseEvent.CLICK, buysugar);
function buysugar(event:MouseEvent):void{
    if (cash1>=0.50){
        buy.play();
        cash1 = cash.text.text;
        cash1 = cash1 - 0.25;
        sugar = sugar_count.text;
        sugar=sugar+16;
    }
}

有没有人知道为什么?

3 个答案:

答案 0 :(得分:2)

从开场问题的评论来看,似乎buy_sugar为null。您认为buy_sugar是时间轴上的一个movieclip,因此可以在您的代码中安全地引用,但如果buy_sugar确实存在,则不会出现此错误。

你绝对肯定buy_sugar与你正在进行的通话存在于同一帧上吗?

假设您目前正在第3帧......

buy_sugar.addEventListener(Event.FOO, onFoo); // if buy_sugar exists on frame 3, this works.

但是如果你在第2帧呢?

gotoAndStop(3);
buy_sugar.addEventListener(Event.FOO, onFoo); // problem... this can fail if buy_sugar exists on 3 but NOT on 2.

确保您引用的剪辑实际存在于写入调用的帧中,并仔细检查您的实例名称拼写。

EDIT ::

那些照片非常有趣。看来buy_sugar是第3帧上存在的movieclip符号,但是shop_sugar在第3帧脚本中跟踪为null。以下是进一步调试的一些建议。

  1. 在您有跟踪的代码(buy_sugar);中,将其替换为 trace(“测试buy_sugar presence”,buy_sugar,currentFrame);

  2. 从舞台上的位置剪切buy_sugar movieclip。在所有其他层下面创建一个新图层,并将buy_sugar粘贴到第1帧的关键帧中。不要在该图层上添加任何其他关键帧。目标是确保所有帧上的buy_sugar始终存在。

    让我知道你这样做时的看法。

  3. 修改

    现在我们确定在所有帧上存在 时可以检测到 ,将该关键帧从1扫描到3,以便剪辑仅存在于第3帧。它是否仍然存在工作?如果是这样,只需将该图层移动到最适合的位置。

    如果它不起作用,再次将该图层移动到movieclip看起来最好的位置。而不是将剪辑放在第3帧上,而是在第3帧上创建一个关键帧,并将剪辑放在所需的位置,而在所有其他帧上,剪辑会在可见舞台之外的某处生成。这有点像hacky,但它可以解决问题。

答案 1 :(得分:0)

我想:

  1. 未创建“购买”对象
  2. 未创建“现金”对象
  3. “cash.text”未创建
  4. 你可以试试这个:

    if(buy)
        buy.play();
    else
        trace("buy object is null");
    
    if(cash && cash.text)
        cash1 = cash.text.text;
    else
        trace("cash object is null");
    

    你能更详细一点吗?

答案 2 :(得分:0)

其中一个项目尚未定义(或在其他地方私下定义)。

假设这是正确的代码段,它可以是buy,cash,cash.text或sugar_count,因为这些是您尝试使用点语法(。)访问属性或方法的对象。