as3如何跟踪哪个movieclip正在调度事件

时间:2012-12-25 22:47:08

标签: actionscript-3 movieclip dispatchevent

我正在开发一款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
    }

提前致谢

1 个答案:

答案 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();

这将阻止事件在显示链上向上冒泡,从而节省应用程序的性能。