我有一个相当简单的计时器事件,它会减少对象数组中所有元素的不透明度:
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);
答案 0 :(得分:0)
问题在于您尝试删除DisplayObject,尽管它可能不再存在。
为避免这种情况,您有两个选择
就像这样,基本上。
选项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);
}
}