操作脚本 3 - 类型错误: 错误 #1009: 无法访问空对象引用的属性或方法



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

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);
            }
        }
    }

每次尝试时都会收到以下错误消息:

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

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

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

我不确定是什么导致了这个问题。

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

trace(shadows);

这将返回类似于以下内容的列表:

[对象阴影],[对象阴影]

,[对象阴影]等

我认为这证明我引用的对象不是空对象,那么还有什么问题呢?

新增信息

影子对象是使用以下代码创建的:

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

问题是您正在尝试删除显示对象,尽管它可能不再存在。

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

  1. 将其从阵列中删除,然后将其从显示列表中删除
  2. 检查它是否仍在包含(...)的显示列表中,并且仅在存在时才将其删除。

基本上是这样的。

选项 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);
            }
        }

相关内容

最新更新