0

ステージ上のインスタンスの削除に問題があります。

ボタンを2回クリックした後も発生し続けるエラーは

「指定された DisplayObject は呼び出し元の子でなければなりません」

誰かがこれで私を助けることができますか?

package src
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;

public class Main extends MovieClip
{   
    var positionY:Number = 80;
    var positionX:Number = 0;
    var motion:MovieClip;
    var fCombo:Array = new Array();
    var n:Number;

public function Main()
{
    generate.addEventListener(MouseEvent.MOUSE_UP, loop); 
    generate.addEventListener(MouseEvent.MOUSE_DOWN, remove); 
    n = Number(inputText.text);
}
function loop(me:MouseEvent):void
{
    var combo:Array = [Punch, Kick, Knee, Elbow];
    n = Number(inputText.text);
    for(var i:Number = 0;i < n;i++ )
        {
        motion = new combo[randomNumber(4)]();  
        fCombo.push(motion);
        motion.y = positionY;
        motion.x = positionX;
        positionX += 100;
        addChild(motion);
            if (i == 4 || i == 9 || i == 14)
                {
                    positionY += 40;
                    positionX = 0;
                }
        }
}
function remove(me:MouseEvent):void
{
    for (var j:Number = 0; j < n; j++ )
    {
        removeChild(fCombo[j]);//error
    }
    positionY = 80;
    positionX = 0;
}

function randomNumber(max:Number):Number
    {
    return(Math.floor(Math.random() * max ));
    }
}

}

4

2 に答える 2

1

作成した新しいオブジェクトを配列に追加し、それを使用してそれらを削除します。しかし、新しいリストを作成するか、古いリストからオブジェクトを削除することを忘れています。そのため、リストをループするときが来たら、既に削除されているオブジェクトを削除しようとしています。

これはいくつかの方法で修正できます。1 つはループ内のステージ AND 配列からオブジェクトを削除することです。

function remove(me:MouseEvent):void
{
    while(fCombo.length)
    {
        removeChild(fCombo.pop());
    }
    positionY = 80;
    positionX = 0;
}
于 2013-06-12T06:18:38.560 に答える
0

targetDisplayObject.parent.removeChild( targetDisplayObject ); 親がnullではないと仮定してトリックを行います。

于 2013-06-12T06:47:32.417 に答える