Динамическое удаление видеоклипов - PullRequest
0 голосов
/ 27 октября 2011

Первый постер, долгое время читатель. У меня была проблема с выяснением этого. Я застрял в своей игре на 4 часа, гуглил и пытался понять, как это сделать. У меня есть игра, в которой я добавляю несколько мультяшных муравьев, чтобы при их нажатии их нужно было убрать со сцены. Есть 4 разных вида муравьев, поэтому я делаю Math.random для выбора того, кого из них добавить. (муравьи 1 + 2 + 3 имеют 50% шанс появления и 4-й 50%)

rnd_nbr = (Math.random() * 5)+1;

У меня есть таймер, делающий 10 тиков, и я сбросил таймер, чтобы сделать бесконечным. Тогда у меня есть математическая случайность, и если предложения добавляют mc 'на сцену с движением от Tweener, и слушатели событий за клики. Но я не могу понять, как удалить их при нажатии. Я сделал много неудачных попыток прямо внутри функции click_candy_anty. Я оставил их закомментированными.

Я прошу прощения за неправильное кодирование abit, но оно будет очищено, когда (надеюсь) оно заработает.

Помощь высоко ценится.

import caurina.transitions.Tweener;

var ant_index:Array = new Array(10);    //index for ants
var ant_number:int; 
var ant_temp:int;   
var rnd_nbr:int;                        //var for rnd number
var score:int = 0;
var score_update:String;
var reset_timer:Boolean = false;
var antTimer:Timer = new Timer(800,10); //timer
antTimer.addEventListener(TimerEvent.TIMER, create_ant);

var anty0_:anty_0;                          //creating ant vars for all 5 kind
var anty1_:anty_1;                          
var anty2_:anty_2;
var anty3_:anty_3;
var anty4_:anty_4;
var screen_number:int = 0;

var antyArray:Array = new Array(10);

var main:main_mc = new main_mc;
main.x = 0; //0,0
main.y = 0;
addChild(main);

var score_format:TextFormat = new TextFormat();
score_format.size = 25;
score_format.align = TextFormatAlign.CENTER;

var score_txt:TextField = new TextField();
score_txt.defaultTextFormat = score_format;
score_txt.text = "" + score;
score_txt.x = 600;
score_txt.y = 20;
score_txt.border = true;
score_txt.autoSize =  TextFieldAutoSize.LEFT ;
score_txt.height = 40;
addChild(score_txt);

var score_txt_update:TextField = new TextField();
score_txt_update.defaultTextFormat = score_format;
score_txt_update.text = "0";
score_txt_update.x = 550;
score_txt_update.y = 20;
score_txt_update.border = true;
score_txt_update.autoSize =  TextFieldAutoSize.LEFT ;
score_txt_update.height = 40;
score_txt_update.alpha = 0;
addChild(score_txt_update);

function click_candy_anty(event:MouseEvent):void{
    if (score < 20){
    //trace("evt: " + evt);
    //this.removeChild();
    //this.removeChild(this);
    //removeChild(evt.currentTarget);

    //removeChild(evt.target.name.substr(7));
    //removeChild(this);
    //removeChild(evt.currentTarget.name);


//  trace("The " + evt.target.label + " button was clicked");
//  trace(evt.type)

    score++;
    score_txt.text = "" + score;
    //score_update = "+1";
    score_txt_update.text = "+1";
    //ori position x:570 y:20
    score_txt_update.y = -30;
    Tweener.addTween(score_txt_update, {y: 20, alpha: 1, time: 0.8, transition:"linear", onComplete:score_txt_update_fade});
    }
    else {
        stop_game();
        trace("48");
    }
}

function score_txt_update_fade(Event = null){
    Tweener.addTween(score_txt_update, {y: 50, alpha: 0, time: 0.4, transition:"linear"});
}

function click_leaf_anty(Event = null):void{
    if (score > 0 && score < 20){
    score--;
    score_txt.text = "" + score;
    score_txt_update.text = "-1";
    score_txt_update.y = 50;
    Tweener.addTween(score_txt_update, {y: 20, alpha: 1, time: 0.4, transition:"linear", onComplete:score_txt_update_fade_neg});
    trace("12 wrong");
    }
/*      else {
        stop_game();
        trace("12");
        trace("score: " + score + ", ");
    }*/
}

function score_txt_update_fade_neg(Event = null){
    Tweener.addTween(score_txt_update, {y: -30, alpha: -1, time: 0.8, transition:"linear"});
}

//screen1();
start_timer();

function screen1(Event = null):void {
    screen_number = 2;//slet når event listener til scr1 kommer
    if (screen_number == 2){

    }
    else {
    screen_number = 2;

    }
}

function screen2(Event = null):void {

    if (screen_number == 3){

    }
    else {
    screen_number = 3;
    }
    start_timer();
}

function start_timer(Event = null):void {
    if (score < 20) {
        if (reset_timer == false){
            antTimer.start();
            //trace("antTimer initialized");
        }
        if (reset_timer == true){
            antTimer.reset();
            antTimer.start();
            //trace("antTimer RESETTED & initialized");
        }
    }
    else {
        stop_game();
        trace("57");
    }

}

function stop_game(Event = null):void {
    if (screen_number != 2){
        screen_number = 2;
    trace("Game completed - launching end screen");
    // move to next screen
        for (var i:Number=0; i<=9;i++){

    ant_temp = ant_number;

    if (ant_temp < 9) {
        //trace("ant_temp er lavere end 9::: " + ant_temp );
        ant_temp++;

    }
    else if (ant_temp == 9) {
        //trace("ant_temp lig med 9::: " + ant_temp );
        ant_temp = 0;
    }

    if (ant_index[ant_temp] == 1){
            //removeChild(anty1_);
            if ("anty1_" + ant_temp != null){ 
            removeChild(getChildByName("anty1_" + (ant_temp)));
                }
        }
        if (ant_index[ant_temp] == 2){
            //removeChild(anty2_);  
            if ("anty2_" + ant_temp != null){ 
            removeChild(getChildByName("anty2_" + (ant_temp)));
                }
        }

        if (ant_index[ant_temp] == 3){  
            //removeChild(anty3_);  
            if ("anty3_" + ant_temp != null){ 
            removeChild(getChildByName("anty3_" + (ant_temp)));
                }
        }

        else if (ant_index[ant_temp] == 4){         
            //removeChild(anty4_);  
            if ("anty4_" + ant_temp != null){ 
            removeChild(getChildByName("anty4_" + (ant_temp)));
                }
        }
            }//for loop end
            screen3();
    }
}

function screen3 (Event = null):void{
    var end:end_mc = new end_mc;
    end.x = 0; //0,0
    end.y = 0; //
    addChild(end);
}

function create_ant(Event = null):void {
    //trace("antTimer triggered");
if (score < 20) {   
        rnd_nbr = (Math.random() * 5)+1;
        ant_index[ant_number] = rnd_nbr; 

        trace("ant_number" + ant_number);
        //trace("ant_index[" + ant_number + "]: " + ant_index[ant_number]);
        if (ant_index[ant_number] == 1){
            anty1_ = new anty_1();
            anty1_.name = "anty1_" + (ant_number);

            anty1_.height = 118;
            anty1_.width = 102;
            anty1_.x = 100;
            anty1_.y = 300;         
            addChild(anty1_);   
            Tweener.addTween(anty1_, {x: 541, time: 3, transition:"linear"});
            anty1_.addEventListener(MouseEvent.MOUSE_DOWN, click_candy_anty);
            //trace("anty1_" + ant_number);
            //trace("" + anty_1[ant_number].name);

        }
        if (ant_index[ant_number] == 2){
            anty2_ = new anty_2();
            anty2_.name = "anty2_" + (ant_number);
            anty2_.height = 118;
            anty2_.width = 102;
            anty2_.x = 100;
            anty2_.y = 300;         
            addChild(anty2_);   
            Tweener.addTween(anty2_, {x: 541, time: 3, transition:"linear"});
            anty2_.addEventListener(MouseEvent.MOUSE_DOWN, click_candy_anty);
            //trace("anty2_" + ant_number);
        }

        if (ant_index[ant_number] == 3){
            anty3_ = new anty_3();
            anty3_.name = "anty3_" + (ant_number);
            anty3_.height = 118;
            anty3_.width = 102;
            anty3_.x = 100;
            anty3_.y = 300;         
            addChild(anty3_);   
            Tweener.addTween(anty3_, {x: 541, time: 3, transition:"linear"});
            anty3_.addEventListener(MouseEvent.MOUSE_DOWN, click_candy_anty);
            //trace("anty3_" + ant_number);
        }

        else if (ant_index[ant_number] > 3 && ant_index[ant_number] < 7){
            anty4_ = new anty_4();
            anty4_.name = "anty4_" + (ant_number);
            anty4_.height = 118;
            anty4_.width = 102;
            anty4_.x = 100;
            anty4_.y = 300;         
            addChild(anty4_);   
            Tweener.addTween(anty4_, {x: 541, time: 3, transition:"linear"});
            anty4_.addEventListener(MouseEvent.MOUSE_DOWN, click_leaf_anty);
            //trace("anty4_" + ant_number);
        }

    ant_temp = ant_number;
    if (ant_temp < 9) {
        //trace("ant_temp er lavere end 9::: " + ant_temp );
        ant_temp++;

    }
    else if (ant_temp == 9) {
        //trace("ant_temp lig med 9::: " + ant_temp );
        ant_temp = 0;
    }

    if (ant_index[ant_temp] == 1){
            //removeChild(anty1_);
            removeChild(getChildByName("anty1_" + (ant_temp)));
        }
        if (ant_index[ant_temp] == 2){
            //removeChild(anty2_);  
            removeChild(getChildByName("anty2_" + (ant_temp)));
        }

        if (ant_index[ant_temp] == 3){  
            //removeChild(anty3_);  
            removeChild(getChildByName("anty3_" + (ant_temp)));
        }

        else if (ant_index[ant_temp] == 4){         
            //removeChild(anty4_);  
            removeChild(getChildByName("anty4_" + (ant_temp)));
        }


/*  if (ant_number == 9) { //resets the ant_number - being the end of the 10th ant
            ant_number = 0;
            start_timer();     // launches the timer again
            trace("Timer resetted");

            for (var i:Number=0; i<=9;i++){

        if (ant_index[i] == 1){
            //removeChild(anty1_);
            removeChild(getChildByName("anty1_" + (i)));
        }
        if (ant_index[i] == 2){
            //removeChild(anty2_);  
            removeChild(getChildByName("anty2_" + (i)));
        }

        if (ant_index[i] == 3){ 
            //removeChild(anty3_);  
            removeChild(getChildByName("anty3_" + (i)));
        }

        else if (ant_index[i] == 4){            
            //removeChild(anty4_);  
            removeChild(getChildByName("anty4_" + (i)));
        }
            }//for loop end

    }//ends if=9 reset*/
    if (ant_number == 9) { //resets the ant_number at 10th ant, and restarts the timer
        ant_number = 0;
        reset_timer = true;
        start_timer();
    }
    else {
        ant_number++;
    }

    /*else {
        ant_number++;
    }*/
  }
  else if (score >= 20 && screen_number != 2){
      stop_game();
      trace("14");
  }
} //create_ant func end

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

Вы также можете использовать:

removeChild( evt.currentTarget as DisplayObject );

Или

var clicked_ant:DisplayObject = evt.currentTarget as DisplayObject;
removeChild( clicked_ant );
0 голосов
/ 27 октября 2011

Допустим, вы создали класс Ant, у вас может быть что-то вроде этого

 private function init():void
 {
      this.addEventListener( MouseEvent.CLICK , clickHandler );
 }

 private function clickHandler( event:MouseEvent ):void
 {
      this.removeEventListener( MouseEvent.CLICK , clickHandler );

       if( this.parent != null )
           this.parent.removeChild( this );
 }
...