2011-10-07 36 views
0

从上面看,我的角色movieclip水平和垂直移动。 在开始位置,人物鼻子朝向屏幕的顶部,所以当按下左键时,它应该向左旋转90度,向左转动+继续向左移动。AS3我怎样才能停止从循环旋转?

因为我使用了运动功能+旋转功能,它现在可以循环90度旋转并向左旋转四周。 我明白为什么会发生这种情况,但我的问题是,

我怎样才能让它旋转角度只有一次,并继续面向那个方向的运动?

var leftArrow: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; 
    } 

} 

function keyReleased(event:KeyboardEvent):void { 
    if (event.keyCode == Keyboard.LEFT) { 
     leftArrow = 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; 
      char.rotation -= 90; 

     } 

回答

1

这可能有助于在按下按键时设置字符状态变量,然后使用该状态为字符设置动画。

例如,在按下按键时设置旋转和x和y速度,然后使用这些值更新字符x和y以及帧事件的旋转。

var leftArrow:Boolean; 
var rightArrow:Boolean; 
var speed:Number = 4; 
var vx:Number = 0; 
var vy:Number = 0; 
var heading:Number = 0; 
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) { 
     vx = -speed; 
     vy = 0; 
     heading = 90; 
     leftArrow = true; 
    } 
    else if (event.keyCode == Keyboard.RIGHT) { 
     vx = speed; 
     vy = 0; 
     heading = -90; 
     rightArrow = true; 
    } 


} 

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

function everyFrame(event:Event):void { 
    var mazehit:Boolean = false; 
    if (leftArrow || rightArrow) { 

     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 += vx; 
      char.y += vy; 
      char.rotation = heading; 

     } 
+0

谢谢你这个答案,但是注册点居中,当我按左/右/左的movieclip不住在同一个.x,任何想法我做错了什么? – Opoe

+0

这可能与我在'keyReleased'方法中发生的错误有关 - 对于这两种情况我都有'leftArrow = false'。我已经纠正它,它现在应该工作。 –

+0

我认为它与旋转有关,你的代码是exaclty我要求的,我只需要movieclip来面对箭头键的方向,我开始认为旋转可能不是正确的方式。谢谢你的时间 – Opoe