如何删除AddChild函数调用的所有实例?

时间:2011-03-30 23:09:49

标签: actionscript-3

我正在制作一个狙击游戏,我正在尝试修复一个问题,当我点击该角色杀死他时我会遇到这个问题。无论如何,创建了一个很短的多个MovieClip实例,并且我需要在执行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 个答案:

答案 0 :(得分:1)

编辑: 好的,这是我从测试中看到的问题。 你永远不会将blood_c设置为1,因此它永远不会移除血迹。如果你强迫它(为了测试我强迫它= 1)你将永远不会看到血液啪啪,因为它在创建后立即被移除。

所以我的建议是你第一次添加孩子(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);}
    }
}

答案 1 :(得分:0)

沮丧和肮脏,你可以这样做(但不会删除孩子的孩子):

while (numChildren > 0) {
    removeChild(getChildAt(0));
}