引用类中舞台上的对象?

时间:2013-03-24 03:21:09

标签: actionscript-3 flash actionscript game-development

所以我遇到了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但是在引用课堂内的玩家时我会收到错误任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

看起来你的敌人阶级无法进入舞台;但你正试图引用stage.player。您可以从主类访问舞台,但不能从其他类访问,除非您通过构造函数传递它。

尝试将舞台传递给敌人类并创建一个类变量来存储它。即:

private var stageInst:Stage;

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

然后在moveEnemy中使用stageInst.player访问播放器的剪辑。

当你创建敌人时,你必须从Main传入舞台的一个实例。

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