1

我正在做一个 fps 游戏。游戏包含多个敌人。但我称同一个电影剪辑为敌人。该movieclip 会发送fire 事件并减少玩家生命。但我需要知道哪个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

1 回答 1

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

在您的事件监听器中添加以下内容

 e.stopImmediatePropagation();

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

于 2012-12-25T22:49:55.797 回答