2014-03-07 24 views
0

我试图为我的游戏设置键盘控制,并遇到了一个有趣的障碍:当玩家按下某个键在特定方向上移动时,物理移动的延迟发生类似于编辑文本时发生的延迟。例如,按住“a”键(当然,例如当然可以是任何键),并且在光标将注册“aaaaaaa”之前还有第二个延迟时间。同样的问题发生在这里,所以当方向键被按下时,框架动画在物理运动开始之前就开始了。这导致动画看起来像角色正在运行,然后在大约1或2秒后最终开始移动。Actionscript 3--试图解决按键时发生的延迟。

任何想法,想法或修复建议将不胜感激。在此先感谢,所有。

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


character.stop(); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress); 
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease); 
stage.addEventListener(Event.ENTER_FRAME, onEnterThisFrame); 

var moving:int = 4; 
var animate:Boolean = false; 


function onKeyPress(e:KeyboardEvent):void 
    {  
     switch(e.keyCode) 
     { 
      case 37: moving = 1; character.gotoAndStop(6); character.x-=5; break; //left 
      case 38: moving = 2; character.gotoAndStop(4); character.y-=5; break; //up 
      case 39: moving = 3; character.gotoAndStop(8); character.x+=5; break; //right 
      case 40: moving = 4; character.gotoAndStop(2); character.y+=5; break; //down 
      case 32: handleAttack();     

     } 

     animate = false; 

    } 

function onKeyRelease(e:KeyboardEvent):void 
     { 
     switch(moving) 
     { 
      case 1: character.gotoAndStop(6); break; //left 
      case 2: character.gotoAndStop(4); break; //up 
      case 3: character.gotoAndStop(8); break; //right 
      case 4: character.gotoAndStop(2); break; //down 
     } 

     animate = true; 
    } 


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



    function onEnterThisFrame(e:Event):void 
     { 

     if (animate == true) 
     { 
      switch (moving) 
      { 
       case 1: if(character.currentFrame == 6) character.gotoAndStop(5); break; 
       case 2: if(character.currentFrame == 4) character.gotoAndStop(3); break; 
       case 3: if(character.currentFrame == 8) character.gotoAndStop(7); break; 
       case 4: if(character.currentFrame == 2) character.gotoAndStop(1); break; 
      } 
     } 


    } 
+0

为什么不使用输入框作为游戏的主循环?在你的代码中,在“输入框架”中,你只能管理运动状态...... –

回答

0

对每个方向的bool和改变你的onkeypress事件和onKeyRelease设置这些,然后检查他们,你onEnterThisFrame功能移动你的性格。