Как удалить все экземпляры, вызываемые функцией AddChild? - PullRequest
0 голосов
/ 31 марта 2011

Я работаю над снайперской игрой и пытаюсь решить проблему, с которой сталкиваюсь, когда нажимаю на персонажа, чтобы убить его.В любом случае, создаются несколько коротких экземпляров мувиклипа, и мне нужно, чтобы все они были удалены одновременно при выполнении оператора if.Возможно ли это, если да, то каков код?

Код:

stop();
Mouse.hide();


var blood:Array = [];

// after you create your clips your needing to keep track of.


var level_complete1:level_complete = new level_complete();
var ammo:Number = 5;
var cash:Number= 100;
var level:Number = 1;
var exp:Number = 0;
var blood_c:Number = 0;
var exp_needed = 25;
var dead_check:Number = 0; //Check to see if the target is dead
var check_blood:Number = 0; //Check to make sure blood doens't loop
var blood_splat1:blood_splat = new blood_splat();
blood.push(blood_splat1);

target1.addEventListener(MouseEvent.CLICK, target_shot);
function target_shot(event:MouseEvent):void{
    if(dead_check==0){
        addChild(blood_splat1);
        blood_splat1.y = mouseY;
        blood_splat1.x = mouseX;
        target1.gotoAndPlay(32);
        if (blood_splat1.currentFrame==6){
            //blood_splat1.gotoAndStop(6);
            //removeChild(blood_splat1);
            cash=cash+150;
            exp=exp+25;
            ammo=ammo-1;
            dead_check = 1;
            blood_c = 1;

            }
        }
    if (dead_check==1){
        addChild(blood_splat1);
        blood_splat1.y = mouseY;
        blood_splat1.x = mouseX;
        target1.gotoAndStop(38);
        blood_c = 1;
        //if (blood_splat1.currentFrame==6){
            //blood_splat1.gotoAndStop(6);

    if (blood_c==1){
        for each(var mc:MovieClip in blood){
            mc.parent.removeChild(mc);
            blood.splice(blood.indexOf(mc), 1);
}
        }

            }



    }

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Редактировать: Хорошо, вот проблема, которую я вижу из тестирования.Вы никогда не получите blood_c равным 1, поэтому он никогда не удалит кровь.если вы его принудительно (для тестирования я принудил = 1), вы никогда не увидите брызги крови, потому что они удаляются сразу после создания.

Так что мой совет, когда вы впервые добавляете addChild (blood_splat1);Вы делаете таймер.или счетчик кадров.или что-то, и когда он ведет обратный отсчет или срабатывает (как таймер, он вызывает функцию для удаления брызг крови. Вот так:

stop();
Mouse.hide();


import flash.utils.Timer;
import flash.events.TimerEvent;

var bloodTimer:Timer = new Timer(1000, 1); // one second and doesn't repeat.

//var level_complete1:level_complete = new level_complete();
var ammo:Number = 5;
var cash:Number= 100;
var level:Number = 1;
var exp:Number = 0;
var blood_c:Number = 0;
var exp_needed = 25;
var dead_check:Number = 0; //Check to see if the target is dead
var check_blood:Number = 0; //Check to make sure blood doens't loop
var blood_splat1:blood_splat = new blood_splat();

target1.addEventListener(MouseEvent.CLICK, target_shot);

function removeBlood(te:TimerEvent):void
{
    if(blood_splat1.parent != null && blood_splat1.parent.contains(blood_splat1))
    {
        blood_splat1.parent.removeChild(blood_splat1);
    }
}

function target_shot(event:MouseEvent):void
{
    if(dead_check==0)
    {
        addChild(blood_splat1);
        bloodTimer.start();
        bloodTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeBlood);
        blood_splat1.y = mouseY;
        blood_splat1.x = mouseX;
        target1.gotoAndPlay(32);
        if (blood_splat1.currentFrame==6)
        {
            //blood_splat1.gotoAndStop(6);
            //removeChild(blood_splat1);
            cash=cash+150;
            exp=exp+25;
            ammo=ammo-1;
            dead_check = 1;
            blood_c = 1;

        }
    }
    if (dead_check==1)
    {
        addChild(blood_splat1);
        bloodTimer.start();
        bloodTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeBlood);
        blood_splat1.y = mouseY;
        blood_splat1.x = mouseX;
        target1.gotoAndStop(38);
        blood_c = 1;
        //if (blood_splat1.currentFrame==6){
            //blood_splat1.gotoAndStop(6);}
    }
}
0 голосов
/ 31 марта 2011

Вниз и грязно, вы можете сделать это (но это не удалит детей детей):

while (numChildren > 0) {
    removeChild(getChildAt(0));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...