2013-03-24 39 views
0

所以我不得不用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敌人,但我得到一个错误当在课堂内引用玩家时,任何人都可以帮我解决这个问题?

回答

1

使用Event.ENTER_FRAME侦听器的诀窍是event.currentTarget将持有的链接对象多数民众赞成处理事件,event.target将持有的链接,首家获得它的对象,这样你就可以将听者不舞台,而是指向您选择的MovieClip,包括在游戏中拥有多个单独的侦听器。比如说,你给Enemy级别的听众提供了一个查询阶段的玩家子弹列表,并且检查碰撞this,玩家也可以这样做。或者,您使用单个侦听器并执行其中的所有工作,使用本地数组存储敌人,子弹,玩家和其他对象的列表。

根据传入参数进入帧监听器 - 您的事件被自动调度,所以您不应该打扰这一点,它不接受多个参数。

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

+0

哦,感谢你回答,但我tryed与类添加了运动和它的工作!但是现在我遇到的这个问题很简单,但我不知道,我是在试图在球员在舞台上时参考球员中的球员并且没有自己的课程。你认为你可以帮助我吗? ?。 – AlanZ2223 2013-03-24 04:14:05

0

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

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

private var stageInst:Stage; 

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

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

当你创造敌人时,你必须从Main中传递一个舞台实例。

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