1

私はこれを2晩試みてきましたが、何の喜びもありませんでした。できれば助けてください...

ダーツやその他の武器を使った単純な投げゲームです。私がやろうとしているのは、武器を変更するときに配列とそのすべての子を削除することです。

すべての子と配列を手間をかけずに削除する簡単なコードスニペットがあると思いますが、まだ理解していません。何か知っているか提案できる場合は、本当に感謝しています。

「removeArrayAndAllInstances(balls);」のようなもの もしも...現時点で私が持っている....(ボールは問題の配列です)

 for(var inter:int = balls.length - 1; inter > -1; inter--)
      {
        balls.splice(1);
        balls.splice(1, balls.length);
      }

しかし、この docent は何らかの理由で動作し、配列とそのすべての子はまだステージ上にあります。

私も試しました

balls[];

運が悪い...

私のコードを判断しないでください私は初心者です。私は確かに明らかであり、それが嫌な混乱であることを知っています。申し訳ありません(それが私にとって意味のある唯一の方法です)。

私は多くのことを試しました、誰かが助けてくれることを願っています

前もって感謝します.....

    var mouseTarget:MovieClip;
var balls:Array = new Array();
var ball:MovieClip = new dart();
var hammers:MovieClip = new hammer();
ball.x = 150;
ball.y = 50;

hammer_btn.addEventListener(MouseEvent.MOUSE_DOWN, hammerweapon);
dart_btn.addEventListener(MouseEvent.MOUSE_DOWN, dartweapon);

function removealldartsfromstage(e:MouseEvent):void
{
  for(var inter:int = balls.length - 1; inter > -1; inter--)
  {
    balls.splice(1);
    balls.splice(1, balls.length);
  }

    stage.removeEventListener(MouseEvent.MOUSE_UP, addDart);    
} 
function dartweapon(e:MouseEvent):void
{
    stage.removeEventListener(MouseEvent.MOUSE_UP, addHammer);
    dart_btn.removeEventListener(MouseEvent.CLICK, dartweapon);
    stage.addEventListener(MouseEvent.MOUSE_UP, addDart);
    //removeChild(balls);

}
function hammerweapon(e:MouseEvent):void
{
    stage.removeEventListener(MouseEvent.MOUSE_UP, addDart);
    dart_btn.addEventListener(MouseEvent.MOUSE_DOWN, dartweapon);
    //stage.addEventListener(MouseEvent.MOUSE_UP, addDart);
    stage.addEventListener(MouseEvent.MOUSE_UP, addHammer);

}


function addHammer(e:MouseEvent):void
{
    var hammers = new hammer();
    addChild(hammers);
    removeChild(dart_btn);
    addChild(dart_btn);
    dart_btn.addEventListener(MouseEvent.CLICK, dartweapon);
    balls.splice(10);
}

function addDart(e:MouseEvent):void
{
    str.alpha = 0;
    var ball = new dart();
    addChild(ball);
    removeChild(hammer_btn);
    addChild(hammer_btn);
    ball.x = 150;
    ball.y = 50;
    balls.push(ball);
    trace(balls);
    addEventListener(Event.ENTER_FRAME, checkIfHitTest);
    hammer_btn.addEventListener(MouseEvent.MOUSE_DOWN, removealldartsfromstage);
    function checkIfHitTest(Event)
    {
        for (var i:int = 0; i<balls.length; i++)
        {
            if (balls[i].dart_point.hitTestObject(eyeleft))
            {
                trace("hitleftbullseye");
                ball.gotoAndStop("hitlefteyeframe");
                Event.currentTarget.removeEventListener(Event.type, checkIfHitTest);
                balls.splice(i, 1);
            }

        }
    }
}
4

1 に答える 1

1

ボール配列は、ボール参照用の単なるストレージです。それらが追加されたステージや DisplayObjectContainer とは一切関係ありません。したがって、それらを個別に削除する必要があります。

これは私がすることです:

while(balls.length > 0)
{
    var ball:MovieClip = balls.pop();
    if (ball.parent) // Just to make sure you are referencing the correct container.
    {
        ball.parent.removeChild(ball);
    }
}

あなたのゲームのロジックをうまく理解できません。とはいえ、管理を容易にするために、クリップのグループごとにコンテナを作成することをお勧めします。たとえば、作成段階では次のようになります。

var ballContainer:Sprite = new Sprite();
addChild(ballContainer);
for (var i:int = 0; i < ballLimit; i++)
{
    var ball:Dart = new Dart();
    ballContainer.addChild(ball);
}

このようにして、一度にすべての子をクリアできます。

function removeAllChildren(container:Sprite) // Or just DisplayObjectContainer
{
    while(container.numChildren > 0)
    {
        container.removeChild(container.getChildAt(0));
    }
}
于 2012-06-10T21:44:20.983 に答える