2012-12-25 21 views
1

即时通讯工作在fps游戏。游戏包含多个敌人。但即时通讯与敌人相同的动画片段。该movieclip发送火灾事件,并减少玩家的生活。但我需要知道哪个movieclip正在调度事件。我随机添加敌人,我需要知道刚刚开火的敌人的敌人位置。下面有一些代码,可以帮助...as3如何跟踪哪个movieclip正在调度事件

dispatchEvent(new Event('Enemy_Fired')); // this event is dispatching from enemy movieclip 

this.addEventListener('Enemy_Fired',ReduceLife); 


    public function ReduceLife(e:Event){ 
     life--; 
     var currentLife:int = life * lifeRatio; 
     if(life<1){ 
      Game_Over(); 
      //game_completed(); 
     } else { 
      sview.playerhit.gotoAndPlay(2); 
      sview.lifebar.gotoAndStop(100 - currentLife); 
      sview.health.text = String(currentLife); 
     } 
//Here i need to know this event dispatched from which enemy 
    } 

在此先感谢

回答

4

你可以得到通过使用调度该事件的对象的引用:

e.target 

好像父正在调度该事件,正如在这行代码中看到的那样。

dispatchEvent(new Event('Enemy_Fired')); // this event is dispatching from enemy movieclip

因为dispatchEvent相同this.dispatchEvent,这意味着你的根类调度事件。

您需要将其更改为这个 yourEnemyMovieClip.dispatchEvent(new Event('ENEMY_FIRED',true,false);

请注意,我把你的事件的气泡财产上的真实,取消虚假。气泡意味着您的活动将在显示链上起泡。这很重要,因为您正在根类中侦听事件,这比分派事件的影片剪辑高一级。

请参阅事件类,这里的构造:在你的事件侦听 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html

添加以下

e.stopImmediatePropagation(); 

这将向上冒泡任何更高的displaychain停止的情况下,节能性能在应用。

+1

我之前检查过,它显示我的根类,我在哪里捕捉事件,我需要从哪里调度事件的动画片... –

+0

啊,我明白了,我更新了我的答案! – user1574041