1

我一直在尝试这样做两个晚上,但没有任何快乐,如果可以,请帮助...

用飞镖和其他武器进行简单的投掷游戏,我想做的是在我更换武器时删除一个数组及其所有子项,

我确信有一个简单的代码片段可以毫不费力地删除所有子元素和数组,但我还没有弄清楚,如果你知道或可以提出任何建议,我将不胜感激。

类似“removeArrayAndAllInstances(balls);” 如果只是......此刻我有......(球是有问题的数组)

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

但是由于某种原因,这个讲解员工作,阵列和它的所有孩子都还在舞台上。

我也试过

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 回答