Динамическое удаление видеороликов

#arrays #actionscript-3 #mouseevent #removechild

#массивы #actionscript-3 #mouseevent событие мыши #удалить ребенка

Вопрос:

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

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

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

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

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

 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 amp;amp; 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 amp; 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 amp;amp; 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 amp;amp; screen_number != 2){
      stop_game();
      trace("14");
  }
} //create_ant func end
 

Ответ №1:

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

 removeChild( evt.currentTarget as DisplayObject );
 

Или

 var clicked_ant:DisplayObject = evt.currentTarget as DisplayObject;
removeChild( clicked_ant );
 

Ответ №2:

Допустим, вы создали класс 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 );
 }
 

Комментарии:

1. Да, в идеале класс был бы лучшим. Вероятно, я должен был спланировать это немного лучше, когда начинал, вместо того, чтобы просто начинать. Но я заставил его работать с этой строкой: removeChild(getChildByName(evt.currentTarget.name ));