TypeError:错误#1009:无法访问空对象引用的属性或方法

时间:2014-04-02 16:08:04

标签: actionscript-3 flash

我有一个相当简单的计时器事件,它会减少对象数组中所有元素的不透明度:

public function onShadowFade(timerEvent:TimerEvent):void
    {
        for each (var newShadow:Shadow in shadows) 
        {
            newShadow.alpha -= 0.02;

            if (newShadow.alpha <= 0)
            {
                newShadow.parent.removeChild(newShadow);
            }
        }
    }

这会尝试以下错误消息:

  

TypeError:错误#1009:无法访问空对象引用的属性或方法

据我所知,此问题可能由以下原因引起:

  • 没有声明实例(我在课程开始时这样做)
  • 错误拼写实例名称,因此引用未定义的对象(已选中)

我不确定导致此问题的原因。

在尝试调试问题时,我添加了一行代码来跟踪我的数组 - 阴影 - 每次运行:

trace(shadows);

这将返回类似于此的列表:

  

[物体阴影],[物体阴影],[物体阴影]等。

我认为这证明我引用的对象不是空对象所以还有什么错误?

已添加信息

使用以下代码创建阴影对象:

var newShadow:Shadow = new Shadow();
shadows.push(newShadow);
newShadow.x = shadowX;
newShadow.y = shadowY;
addChild(newShadow);

1 个答案:

答案 0 :(得分:0)

问题在于您尝试删除DisplayObject,尽管它可能不再存在。

为避免这种情况,您有两个选择

  1. 将其从数组中删除,然后将其从displaylist中删除
  2. 检查它是否仍在带有contains(...)的displaylist中,并且仅在它存在时将其删除。
  3. 就像这样,基本上。

    选项1)

    if (newShadow.alpha <= 0)
                {
                    shadows.splice(IndexOf(newShadow), 1);
                    newShadow.parent.removeChild(newShadow);
                }
    

    选项2)

    if (newShadow.alpha <= 0)
            {
                if(newShadow.parent.contains(newShadow){
                   newShadow.parent.removeChild(newShadow);
                }
            }