Flash从计时器中删除子项

时间:2013-11-19 08:54:35

标签: actionscript-3 flash timer

我有25个名为drone的影片剪辑类对象,当我点击它时,2秒后我希望对象消失。我还有25个名为倒计时的计时器。这是我做的:

function clickHandler (event:MouseEvent):void{
event.currentTarget.hp--;

if(event.currentTarget.hp <= 0)
{
    for(var i:int = 0;i<25;i++)
    {
        if(event.currentTarget == _drone[i])
        {
            countdown[i].start(); //start timer

        }
    }
}
}

这是我的计时器:

for(var i:int = 0;i<25;i++)
{
    countdown[i] = new Timer(2000);     
    countdown[i].addEventListener(TimerEvent.TIMER,timerHandler);
}
function timerHandler(e:TimerEvent):void {
    //remove the drone I clicked
    //I also dont know which drone i'm clicking

}

我应该如何在timerHandler中删除我点击的对象?

2 个答案:

答案 0 :(得分:1)

您可以使用Dictionary。使用计时器作为键,使用movielcip作为值。

import flash.utils.Dictionary;

var dict:Dictionary = new Dictionary();

function clickHandler (event:MouseEvent):void{
    event.currentTarget.hp--;

   if(event.currentTarget.hp <= 0)
   {
       for(var i:int = 0;i<25;i++)
       {
            if(event.currentTarget == _drone[i])
            {
                dict[countdown[i]] = _drone[i];//set the target mc here
                countdown[i].start(); //start timer
                break;
             }
        }
   }

}

function timerHandler(e:TimerEvent):void {

     var mc:MovieClip = dict[e.target] as MovieClip;//get the object been clicked

     if (mc && mc.parent) {
        mc.parent.removeChild(mc);//remove it
     }
 } 

答案 1 :(得分:0)

如果更改很少,请设置一个数组来跟踪无人机:

var arrayToRemove:Array = new Array();

然后在点击处理程序中存储要在那里删除的无人机:

arrayToRemove.push(event.currentTarget);

并在timerHandler中删除数组的第一个元素:

removeChild(arrayToRemove.shift());

由于每个延迟都相同,因此将保留事件和删除的顺序。虽然,使用上面的示例概括代码并将所有无人机和定时器存储在数组中可能会更好,因此您可以拥有任意数量的代码。