2011-10-05 26 views
2

在迷宫游戏上工作。当左键被按下时,动画片段(char)应该向左转90度。As3如何翻转动画片以面对移动方向?

纠正我,如果我错了,但我想我可以使用此代码;

char.scaleX *= -1; 

但是,最重要的是角色不会穿过迷宫的墙壁。 我认为这是我在执行上面的代码时遇到的问题。 因为当我放在这里时它不能正常工作;

if(!mazehit) { 

        char.y += speed; 
        char.scaleX *= -1; 


       } 

我给你的问题是,我必须在哪里放置代码来翻转动画片段?

var leftArrow, rightArrow, upArrow, downArrow:Boolean; 
var speed:Number = 4; 
var charRadius:Number = 10; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased); 
stage.addEventListener(Event.ENTER_FRAME, everyFrame); 

function keyPressed(event:KeyboardEvent):void { 
    if (event.keyCode == Keyboard.LEFT) { 
     leftArrow = true; 
    } 
    if (event.keyCode == Keyboard.RIGHT) { 
     rightArrow = true; 
    } 
    if (event.keyCode == Keyboard.UP) { 
     upArrow = true; 
    } 
    if (event.keyCode == Keyboard.DOWN) { 
     downArrow = true; 
    } 
} 

function keyReleased(event:KeyboardEvent):void { 
    if (event.keyCode == Keyboard.LEFT) { 
     leftArrow = false; 
    } 
    if (event.keyCode == Keyboard.RIGHT) { 
     rightArrow = false; 
    } 
    if (event.keyCode == Keyboard.UP) { 
     upArrow = false; 
    } 
    if (event.keyCode == Keyboard.DOWN) { 
     downArrow = false; 
    } 
} 

function everyFrame(event:Event):void { 
    var mazehit:Boolean = false; 
    if (leftArrow) { 
     for(var i:int = 0; i < speed; i++) { 
      if(bounds.hitTestPoint(char.x - charRadius - i, char.y, true)) { 


       mazehit = true; 
       break; 
      } 
     } 
     if(!mazehit) { 

      char.x -= speed; 




     } 

    } else if (rightArrow) { 
     for(var j:int = 0; j < speed; j++) { 
      if(bounds.hitTestPoint(char.x + charRadius + j, char.y, true)) { 

       mazehit = true; 
       break; 
      } 
     } 
     if(!mazehit) { 

      char.x += speed; 
     } 
    } else if (upArrow) { 
     for(var k:int = 0; k < speed; k++) { 
      if(bounds.hitTestPoint(char.x, char.y - charRadius - k, true)) { 

       mazehit = true; 
       break; 
      } 
     } 
     if(!mazehit) { 
      char.y -= speed; 
     } 

    } else if (downArrow) { 

     for(var m:int = 0; m < speed; m++) { 
      if(bounds.hitTestPoint(char.x, char.y + charRadius + m, true)) { 

       mazehit = true; 
       break; 
      } 
     } 
     if(!mazehit) { 

      char.y += speed; 


     } 
    } 
} 

感谢您的时间

回答

3

根据方向上的速度我将更新:

char.scaleX = (speed > 0) ? 1 : -1; 

或者,通过已经按下的键:

if(keyLeft && !keyRight) 
{ 
    char.scaleX = -1; 
} 
else if(keyRight && !keyLeft) 
{ 
    char.scaleX = 1; 
} 
else 
{ 
    // keep current direction 
} 
+0

谢谢你为你的答案,我尝试了几件事情,但正如你看到整个代码充满了if语句,所以我很困惑这里部分应该去 – Opoe

+0

当所有的东西都被计算出来的时候,把它放在你的EnterFrame函数的末尾。 – Mattias

+0

谢谢你Mattias – Opoe