2012-08-28 149 views
0
一起移动

我的问题是在我做的只是用不同_boundary(楼)_player一起移动闪存_saw是在舞台只是静态影片剪辑与玩家

public class PiggyRun extends MovieClip 
{ 


private var _vy:Number; 
private var _vx:Number; 

我在剧本球员

public var _player:player; 
public var _boundary:Boundary; 
public var _rp:RG; 

我宣布刚才看到一样与边界

public var _saw:saw; 
public var _jump:Boolean=true; 



    public function PiggyRun():void 
    { 
    _rp.visible=false; 
    _vx=0; 
    _vy=0; 
    _player.gotoAndStop('walking'); 
    stage.focus= stage; 
    this.addEventListener(Event.ENTER_FRAME,enterFrameHandler); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, kDHandler); 
    stage.addEventListener(KeyboardEvent.KEY_UP, kUHandler); 


    } 

     private function enterFrameHandler(e:Event):void 
     { 

我增加x方法,因为它是一个正在运行的游戏

 _vy+=2; 
     _vx+=.5; 

     if(_vx>10) 
     { 
      _vx=10 
     } 
     _player.x+=_vx; 
     _player.y+=_vy; 




     borders(); 
     stageFocus(); 
     sawblade(); 
     } 

的控制时,按下

 private function kDHandler(e:KeyboardEvent):void 
     { 

      switch(e.keyCode) 
      { 

       case 38: 
       if(_jump){ 
       _jump=false;  
       _vy=-20; 

       } 
       break; 


       default: 



      } 
     } 

我删除了这个功能

 private function kUHandler(e:KeyboardEvent):void 
     { 
      switch(e.keyCode) 
      { 


      } 
     } 

     private function borders():void 
     { 
      if(_vy > 0) 
      { 
       if (_player.y>stage.stageHeight) 
       { 
        _player.x=_rp.x; 
        _player.y=_rp.y; 
        _boundary.x=0; 
        _boundary.y=0; 
        _saw.x=0; 
        _saw.y=0; 
        _vy=0; 
        _vx=0; 

       }else{ 
        var border:Boolean=false; 

        if(_boundary.hitTestPoint(_player.x,_player.y,true)) 
        { 
        border=true; 

        } 
         if (border) 
         { 
          while(border) 
          { 

          _player.y-=0.05; 

          _jump=true; 
          border=false; 
           if(_boundary.hitTestPoint(_player.x,_player.y,true)) 
           { 
           border=true; 

           } 
          } 
          _vy=0; 

         } 
       } 
      } 
     } 

我其中把这个函数的内容,如果玩家击中锯片就会重生回_rp的位置,但我伤心的2 movieclips不会见,因为他们同时移动 ,即使我强制把_saw连同它功能不起作用

 private function sawblade():void 
     { 
      if(_vy > 0) 
      { 
       if (_player.y>stage.stageHeight) 
       { 
        _player.x=_rp.x; 
        _player.y=_rp.y; 
        _boundary.x=0; 
        _boundary.y=0; 
        _saw.x=0; 
        _saw.y=0; 
        _vy=0; 
        _vx=0; 

       }else{ 
        var sawn:Boolean=false; 

        if(_saw.hitTestPoint(_player.x,_player.y,true)) 
        { 
        sawn=true; 

        } 
         if (sawn) 
         { 
          while(sawn) 
          { 

          _player.x=_rp.x; 
          _player.y=_rp.y; 
          _boundary.x=0; 
          _boundary.y=0; 
          _saw.x=0; 
          _saw.y=0; 
          _vy=0; 
          _vx=0; 
          _jump=true; 
          sawn=false; 
           if(_saw.hitTestPoint(_player.x,_player.y,true)) 
          { 
           sawn=true; 

           } 
          } 
          _vy=0; 

         } 
       } 
      } 
     } 
     private function stageFocus():void 
     { 
      _boundary.x+=(stage.stageWidth * 0.5)-_player.x; 
      _player.x=stage.stageWidth*0.5; 
      _saw.x=5; 
     } 





} 
+0

检查是否将_Child()_saw对象添加到_player对象。似乎_saw.parent等于_player,这使得它随着玩家移动。 – Vesper

+0

这样读取代码有点困难。试着在上面清楚地问你的问题。然后有一个坚实的代码块(附加评论而不是换行符)。和@Vesper一样,我也对你实例化'Player'和'Saw'以及如何将它们添加到舞台上感兴趣。 –

+0

我没有任何addChild,它是一个非常基本的Flash游戏,我只是将它们绘制到舞台上并使它们符号而添加了看到和播放器 –

回答

0

我看了一下你的fla,并且你没有发现任何有关你的MovieClip定位的奇怪。问题在于你的stageFocus函数。你经常把你的锯子的位置定位在x = 5,你的玩家处于舞台的中心位置。只有_boundary被移动。所以你应该像移动_boundary那样移动你的_saw

private function stageFocus():void 
{ 
    var playerOffset:int = (stage.stageWidth * 0.5)-_player.x; 

    _boundary.x+= playerOffset; 
    _player.x=stage.stageWidth*0.5; 
    _saw.x+=playerOffset; 
} 

而在更一般的说明中,我认为你在这里有点头痛。尝试缩小你的游戏概念,或者甚至可以开始use a framework