0

それで、私の質問は次のとおりです。

このエラーが発生する理由

(TypeError: エラー #2007: パラメータの子は null 以外でなければなりません。at flash.display::DisplayObjectContainer/removeChild() at TargetMain/killTarget())

マウス クリックでステージからオブジェクトを削除しようとするときは?

アプリケーションの私のコードは以下のとおりです。

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 が null であることを意味するため、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 オブジェクト上であるかどうかに関係なく) が発生しkillTargetます。killTarget例外を回避する1つの方法は、クリックされたオブジェクトがParaspriteFullタイプでない場合、クリックで本質的に何もしないという回答でPanが示唆したようにすることです。ただし、ステージではなく 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 に答える