2011-05-19 75 views
2

我想用计时器移除在循环中创建的对象。移除在循环中创建的对象的计时器

var timer:Timer = new Timer(2000); 
timer.addEventListener(TimerEvent.TIMER, voegtoe); 

在功能voegtoe我加入一个MovieClip对象叫男人:

man.x=Math.random()*650; 
man.y=Math.floor(Math.random()*(70))+350; 
addChild(man); 

我要2秒后删除该对象。问题是有多个'人'对象。

有人可以帮我吗?

谢谢。

回答

1

将您的Movieclip对象保存在数组中会使后面更容易引用。

var man:Array = new Array(); 

for (var i:int=0; i<10;i++) 
{ 
    man[i] = new Movieclip(); 
    man[i].x=Math.random()*650; 
    man[i].y=Math.floor(Math.random()*(70))+350; 
    addChild(man[i]); 
} 

现在你可以参考您的MC位于阵列位置:

function removeMC(id:int):void 
{ 
    removeChild(man[id]) 
} 
+0

但我该如何删除我的计时器?我想我会为每个人需要一个不同的计时器......? – 2011-05-19 13:36:02

+0

你究竟想达到什么目的?如果定时器在循环中,您应该为定时器创建一个数组,并通过执行timer [i] .removeEventListener(TimerEvent.TIMER,voegtoe)来停止定时器; – nelsond8 2011-05-19 13:57:58

0

您正在寻找的setTimeout功能?

man.x=Math.random()*650; 
man.y=Math.floor(Math.random()*(70))+350; 
addChild(man); 

设置定时器为:

setTimeout(removeMan, 1000); 

定义调用的函数为:

function removeMan():void 
{ 
    removeChild(man) 
} 

这可能是更容易,但使用Timer对象(如nelsond的回答甚至LiveDocs中建议)。

+0

我以为setTimeout在AS3中不起作用? – 2011-05-19 15:15:00

+0

我想链接到l​​ivedocs(as3)本身就可以解决这个问题。 – loxxy 2011-05-19 15:36:31

0

这可以通过几种不同的方式完成。

我的建议是,你有一个类为你的男人。在这个类中你有一个启动removeTimer的函数,并且在创建该人时应该触发它。当2秒钟结束时,我们删除事件侦听器并将其从父母中移除。

,它是将男人的计时器,应该是要实例你的人在任何类。

下面是一个例子

public function initMyTimer() 
{ 
    var timer:Timer = new Timer(2000); 
    timer.addEventListener(TimerEvent.TIMER, voegtoe); 
    timer.start(); 
} 

public function voegtoe(e:TimerEvent):void 
{ 
    trace ('set me up'); 
    var man:Man = new Man; 
    man.x=Math.random()*650; 
    man.y=Math.floor(Math.random()*(70))+350; 
    addChild(man); 
    man.setMyRemoveTimer(); 
} 

现在你的男人类应该有它的这些功能处理移除。请注意,我们正在上面的代码中调用setMyRemoveTimer。你可以在构造函数中调用该函数,但我想在这里显示链接,所以我把它放在上面的代码中。 Man功能将存在于这里:

public function setMyRemoveTimer():void 
{ 
    var removeTimer:Timer = new Timer(2000,1); 
    removeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeMe); 
    removeTimer.start(); 
} 


public function removeMe(e:TimerEvent):void 
{ 
    var removeTimer:Timer = e.target as Timer; 
    removeTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, removeMe); 
    this.parent.removeChild(this); 
} 

这只是一个建议,很多方法可以做到这一点。如果你创造了很多男人,我认为这些男人拥有这样一个阵列的想法是一个很好的建议。

但是,这里的概念是,如果计时器是Man类的成员,则eventHandler将有权从父代中删除监听器以及该监听器。

我不认为这是一个理想的实现,但我试图匹配你目前的设计尽我所能 - 我不想进入阵列来教这个概念。

0

一个简单的方法来指代很多男人是使用name属性,并调用每个man.name="man"+i;

然后使用getChildByName("man"+5)检索任何你想要的影片剪辑。