2013-04-22 38 views
0

我试图检查是否有一个对象的实例在屏幕上,如果有 - 删除它。代码如下 -删除对象的实例如果它存在于舞台上

if (gracetarget.parent) 
{ 
gracetarget.removeEventListener(Event.ENTER_FRAME, gracetarget.graceListener); 
gracetarget.parent.removeChild(gracetarget); 
} 
else if (springtarget.parent) 
{ 
springtarget.removeEventListener(Event.ENTER_FRAME, springtarget.springListener); 
springtarget.parent.removeChild(springtarget); 
} 

我碰到下面的错误 - 类型错误:错误#1009:无法访问空对象引用的属性或方法。

我想这是因为我试图删除一个不存在的对象,但肯定IF语句只应该在对象存在时才运行?

回答

2

首先测试您要删除的对象是否为空。

if (gracetarget != null && gracetarget.parent) { 
... 
} 

如果gracetarget键入(影片剪辑为例),你可以做

if (gracetarget is MovieClip && gracetarget.parent) { 
    ... 
    } 
+0

这样可以消除错误信息,但它不会将舞台上的侦听器或动画片段删除。我想要做的就是把玩家的精灵从一个东西变成另一个东西。所以,当代码添加一个新的动画片段时,它不会删除旧的或其监听器。 – 2013-04-22 17:29:10

+1

@DanLibert你在哪里调用删除对象?如果它是一个组件构造函数,那可能只是它不在舞台上。 – Luis 2013-04-22 17:42:30

+0

监听器和对象应该用我上面发布的IF语句去掉。我刚刚为IF语句添加了一个跟踪,并且他们没有开火。 – 2013-04-22 17:53:46

0

原因gracetarget/springtarget是没有得到从台上撤下来是因为别的地方在你的代码你将其设置为null。你在代码中的某处丢失了这些变量。

再次检查班级的代码,并检查您正在设置的地方是gracetarget/springtarget并跟踪它。还要检查你是否在课堂外设置它的值,并且在所有这些地方设置不同的痕迹以用于调试

如果将变量gracetarget或springtarget设置为null,则实际的movieclip会保持在舞台上,因为gracetarget和springtarget是只是指向实际的动画片段。

我相信你可以轻松地调试这个。祝你好运。

相关问题