2011-10-05 21 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