0

所以,我的问题如下。

为什么我会收到此错误

(TypeError:错误 #2007:参数 child 必须为非空。在 TargetMain/killTarget() 的 flash.display::DisplayObjectContainer/removeChild() 处)

当试图通过鼠标点击从舞台上移除对象时?

我的应用程序代码如下。

package
{
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.ui.Keyboard;

    public class TargetMain extends MovieClip
    {
        public function TargetMain()
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, spawner);//Spawning function listener

            stage.addEventListener(MouseEvent.CLICK, killTarget);//Clicking function listener
        }

        public function spawner(k:KeyboardEvent):void
        {
            if(k.keyCode == 32)
            {
                trace ("spawned");
                var theTarget:ParaspriteFull = new ParaspriteFull();

                theTarget.x = Math.floor(Math.random() * stage.stageWidth);
                theTarget.y = Math.floor(Math.random() * stage.stageHeight);
                addChild(theTarget);

            }
        }

        public function killTarget(toDie:MouseEvent):void
        {
            trace ("clicked")
            var deadTarget:ParaspriteFull = (toDie.target as ParaspriteFull);
            //Below is where I continually get an error and do not know how to fix it.
            //This is also after searching the internet for hours trying to solve my issue.

            //MovieClip(deadTarget).parent.removeChild(deadTarget);
            removeChild(deadTarget);
        }
    }
}

任何帮助是极大的赞赏。

4

2 回答 2

0

错误意味着 deadTarget 为空,所以如果你只想从阶段删除 deadTarget,试试这个

 var deadTarget:DisplayObject = toDie.target as DisplayObject;

 if ( deadTarget && deadTarget.parent) {
     deadTarget.parent.removeChild(deadTarget);
 }

或者你应该找出 deadTarget 的实际类型。

于 2013-07-23T16:25:10.787 回答
0

你正在听舞台上的点击。因此,任何点击(无论是否在 ParaspriteFull 对象上)都会触发killTargetkillTarget避免异常的一种方法是按照潘在答案中建议的那样,如果单击的对象不是 ParaspriteFull 类型,则在单击中基本上什么都不做。但是,我建议收听 ParaspriteFull 对象上的点击,而不是在舞台上。即删除

stage.addEventListener(MouseEvent.CLICK, killTarget);//Clicking function listener

从您的constructor和修改spawner函数中添加点击侦听器为:

theTarget.addEventListener(MouseEvent.CLICK, killTarget);//Clicking function listener

此外,删除 ParaspriteFull 对象上的侦听器,killTarget如下所示:

deadTarget.removeEventListener(MouseEvent.CLICK, killTarget);//Remove clicking function listener
于 2013-07-23T17:26:15.943 回答