0

所以我遇到了 ENTER FRAME 的问题,所以我把它移到了一个单独的班级,这就是班级的样子

 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 但是在引用班级内的玩家时出现错误有人可以帮我解决这个问题吗?

4

2 回答 2

1

使用 Event.ENTER_FRAME 侦听器的技巧是,event.currentTarget它将保存到正在处理事件event.target的对象的链接,将保存到首先接收到它的对象的链接,因此您可以将侦听器不是附加到舞台,而是附加到 MovieClip您的选择,包括在您的游戏中拥有多个听众。比如说,你给你的Enemy班级一个监听器,让它查询舞台的玩家子弹列表并检查碰撞this,玩家也可以这样做。或者,您使用单个侦听器并在其中完成所有工作,使用本地数组来存储敌人、子弹、玩家和其他对象的列表。

在传递参数以进入帧侦听器方面 - 您的事件会自动调度,因此您不应该为此烦恼,并且它不接受多个参数。

关于您的代码,您应该在testPlayerCollisions()下面的侦听器中添加敌人移动代码以查询玩家碰撞。为此,您已经有一个要移动的敌人,因此您只需要调用它的move()函数或您拥有的任何东西。

于 2013-03-24T03:59:47.460 回答
0

It looks like your enemy class doesn't have access to the stage; yet you're trying to reference stage.player. You can access the stage from your main class but not from other classes unless you pass it through the constructor.

Try passing the stage to the enemy class and create a class variable to store it. Ie:

private var stageInst:Stage;

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

Then in moveEnemy use stageInst.player to access the player's clip.

When you create enemy's you'll have to pass in an instance of the stage from Main.

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

于 2013-03-24T08:38:06.910 回答