【问题标题】:Referencing a object that is on the stage inside a class?引用类中舞台上的对象?
【发布时间】:2013-03-24 03:21:09
【问题描述】:

所以我遇到了 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,但是在类内引用玩家时出现错误,谁能帮我解决这个问题?

【问题讨论】:

    标签: actionscript-3 flash actionscript game-development


    【解决方案1】:

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

    在传入帧监听器的参数方面 - 你的事件是自动调度的,所以你不应该为此烦恼,它不接受多个参数。

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

    【讨论】:

    • 哦,谢谢您的回答,但我尝试在课堂上添加动作,它奏效了!!但是现在我遇到的问题很简单,但我不知道,当玩家在舞台上并且没有自己的类时,我试图在类中引用玩家..你认为你可以帮助我吗?.
    【解决方案2】:

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

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

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

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

    当你创建敌人时,你必须从 Main 传入一个场景实例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多