引用一个对象,它是一个类里面的阶段?(Referencing a object that is on

2019-10-30 10:08发布

于是,我只好用enter帧的问题,所以我把它移到一个单独的类,这是一流的样子

 package  {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.accessibility.Accessibility;
    import flash.display.DisplayObject;
    import flash.display.Stage;


    public class enemy extends MovieClip {

        public function enemy() {
            // constructor code

            this.addEventListener(Event.ENTER_FRAME, moveEnemy);

        }
    public function moveEnemy(e:Event):void{

        this.x += 5;
        if(stage.player.scaleX == 1){
            this.scaleX = 1;
            }else {
                this.scaleX = -1;
                }

        }
    }

}

现在,我试着去调整敌人的scaleX根据球员,但引用的类中的播放器时,任何人都可以帮我解决这个我得到一个错误?

Answer 1:

使用Event.ENTER_FRAME侦听器的诀窍是event.currentTarget将持有的链接对象多数民众赞成处理事件, event.target将持有的链接,首家获得它的对象,这样你就可以将听者不舞台,但您所选择的影片剪辑,包括具有比在你的游戏中单一的听众更多。 喂,你给你的Enemy类,计划使查询玩家的子弹阶段的名单,并检查collisiong针对听众this ,玩家也可以这样做。 或者,你可以使用一个单一的监听器,并做它里面的所有的工作,使用本地阵列存储的敌人,子弹,播放器(S)和其他对象名单。

在参数传递进入帧听者而言 - 你的事件自动调度,所以你不应该这样麻烦,而且不接受多个参数。

关于你的代码,你应该在加上敌人移动代码testPlayerCollisions()监听器下面查询玩家碰撞。 对于这一点,你已经拥有你欲动的敌人,所以你只需要调用它的move()函数或任何你拥有它。



Answer 2:

它看起来像你的敌人类没有进入阶段; 但你想引用stage.player。 您可以从您的主要类别,但不能从其他类,除非你通过它通过构造函数访问舞台。

尝试通过舞台敌人类,并创建一个类变量来存放它。 即:

private var stageInst:Stage;

public function enemy(s:Stage){
    stageInst = s;   
}

然后在moveEnemy使用stageInst.player访问玩家的剪辑。

当您创建敌人的你就必须从主舞台的一个实例来传递。

即: var e:enemy = new enemy(stage);



文章来源: Referencing a object that is on the stage inside a class?