我正在开发一款fps游戏。游戏包含多个敌人。但我称同一个电影剪辑为敌人。该movieclip发送火灾事件并减少玩家的生命。但我需要知道哪个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
}
提前致谢
答案 0 :(得分: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);
请注意,我将您的Event的bubbles属性设置为true,并将其取消为false。气泡意味着您的活动将在显示链上冒出来。这很重要,因为您正在侦听根类中的事件,该事件比调度事件的动画片段高一级。
在这里查看Event类的构造函数: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html
你的eventlistener中的添加以下内容
e.stopImmediatePropagation();
这将阻止事件在显示链上向上冒泡,从而节省应用程序的性能。