AS3游戏开发:攻击动作不遵循移动方向

时间:2014-03-29 02:34:06

标签: actionscript-3 controls game-physics

我正在制作一款自上而下的RPG风格游戏,非常回归到塞尔达。这是我基于键盘控件的移动控件的代码。运动本身非常稳固,没有口吃关键综合症,所有动画都被正确触发。

然而,当按下攻击按钮(在这种情况下是SPACE)时,它会触发相应的帧,但是当释放该键时,相应的帧仍然可见,直到按下另一个方向键。因此,当你进行攻击时,看起来他保持剑延长直到另一个动作,等等。只有当按下按键而不是按下按键时才会发生这种情况。这不是预期的结果。我正在寻找的结果是每次按下按键时触发的攻击,创建正常的按钮=攻击,按钮=不攻击。

攻击和移动现在基于变量移动:int = 4;这样我就可以将攻击位置切换到相应的移动方向。

有关如何纠正此问题的任何想法?

import flash.events.Event;
import flash.events.KeyboardEvent; 

character.stop(); 

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);// when key is pressed
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);//when key is released
stage.addEventListener(Event.ENTER_FRAME, MainLoop);

var moving:int = 4;
var movingDown:Boolean = false;
var movingUp:Boolean = false;
var movingRight:Boolean = false;
var movingLeft:Boolean = false;


function onKeyPress(e:KeyboardEvent):void
{ 
   switch (e.keyCode) 
     { 
        case Keyboard.DOWN : movingDown = true; moving = 1; break;
        case Keyboard.UP : movingUp = true; moving = 2; break; 
        case Keyboard.RIGHT : movingRight = true; moving = 3; break; 
        case Keyboard.LEFT : movingLeft = true; moving = 4; break;
        case Keyboard.SPACE : handleAttack();  break;
      }           
 } 

 function onKeyRelease(e:KeyboardEvent):void
 {
    switch (e.keyCode)  
  { 
     case Keyboard.DOWN: character.gotoAndStop(1); movingDown=false;  moving = 1; break;
     case Keyboard.UP: character.gotoAndStop(3);movingUp=false; moving = 2; break;
     case Keyboard.LEFT: character.gotoAndStop(5);movingLeft=false;  moving = 3; break;
     case Keyboard.RIGHT: character.gotoAndStop(7);movingRight=false;  moving = 4; break;   
     case Keyboard.SPACE: handleAttack(); break;      
   }       
} 

 function handleAttack():void
 {          
    switch (moving)
      {
        case 1: character.gotoAndStop(9); movingDown = false;   break;      //down
        case 2: character.gotoAndStop(10); movingUp = false;  break;        //up
        case 3: character.gotoAndStop(11); movingLeft = false;  break;      //left  attacks
        case 4: character.gotoAndStop(12); movingRight = false;  break;     //right
      }
}    

function MainLoop(e:Event):void
{

 switch (true) 
   {
     case movingDown: character.gotoAndStop(2); character.y+=4.5; break; 
     case movingUp: character.gotoAndStop(4); character.y-=4.5; break;
     case movingLeft: character.gotoAndStop(6); character.x-=4.5; break;
     case movingRight: character.gotoAndStop(8); character.x+=4.5; break; 
   } 

}

1 个答案:

答案 0 :(得分:0)

我自己有点新,但我认为这是因为onKeyPress()和onKeyRelease()指向同一个函数handleAttack(),因此即使你释放也指向相同的框架。尝试为每个攻击函数制作两个单独的攻击函数。

e.g onPeyPress()

的attackPressed()
function attackPressed():void
{          
    switch (moving)
    {
        case 1: character.gotoAndStop(9); movingDown = false;   break;      
        case 2: character.gotoAndStop(10); movingUp = false;  break;       
        case 3: character.gotoAndStop(11); movingLeft = false;  break;     
        case 4: character.gotoAndStop(12); movingRight = false;  break;     
    }
}
对于onKeyRelease()

和attackRelease()

function attackRelease():void
{
    switch (moving)
    {
        case 1:character.gotoAndStop(1); movingDown = false;  break;
        case 2:character.gotoAndStop(3); movingUp = false; break; 
        case 3: character.gotoAndStop(5); movingLeft = false; break; 
        case 4: character.gotoAndStop(7); movingRight = false; break;
    }
 }

希望这有帮助。