2014-10-09 90 views
0

這是代碼:jQuery的遊戲人物動作系統

$(document).ready(function(){ 

     var mUp=false; 
     var mLeft=false; 
     var mRight=false; 

     function movement(){ 
      $(function(){ 
       if(mUp){ 
        $('.user').animate({ 
         bottom: '+=120' 
        },{ 
         duration: 50, 
         easing: 'linear', 
         complete: function() { 
          $('.user').animate({ 
           bottom: '-=120' 
          },{ 
           duration: 150, 
           easing: 'linear', 
           complete: function() { 
            mUp=false; 
            if(!mRight&&!mLeft){ 
             $('.user').stop(); 
            } 
           } 
          }).dequeue(); 
         } 
        }).dequeue(); 
       } 

       if(mRight){ 
        $('.user').animate({ 
         left: '+=1000' 
        },{ 
         duration: 1000, 
         easing: 'linear', 
        }).dequeue(); 
       } 

       if(mLeft){ 
        $('.user').animate({ 
         left: '-=1000' 
        },{ 
         duration: 1000, 
         easing: 'linear', 
        }).dequeue(); 
       } 
      }); 
     } 



     $(document).keydown(function(e){ 
      var curKey=e.keyCode; 
      if(curKey==39){ 
       console.log('right+'); 
       if(!mRight){ 
        mRight=true; 
        movement(); 
       } 
      } 
      if(curKey==37){ 
       if(!mLeft){ 
        mLeft=true; 
        movement(); 
       } 
      } 
      if(curKey==38){ 
       console.log('up+'); 
       if(!mUp){ 
        mUp=true; 
        movement(); 
       } 
      } 
     }); 

     $(document).keyup(function(e){ 
      var curKey=e.keyCode; 
      if(curKey==39){ 
       console.log('right-'); 
       if(!mUp){ 
        $('.user').stop(); 
       } 
       mRight=false; 
      } 
      if(curKey==37){ 
       console.log('left-'); 
       if(!mUp){ 
        $('.user').stop(); 
       } 
       mLeft=false; 
      } 
      if(curKey==38){ 
       console.log('up-'); 
      } 
     }); 
    }); 

我正在爲一個基於jQuery的遊戲簡單的運動系統。我可以左右移動角色並跳轉。在跳轉動畫仍在進行的過程中,嘗試向左或向右移動角色時,我的問題就開始了。如果我在已經向左或向右移動的情況下跳轉,但是當我第一次跳轉時,當跳轉動畫仍然有效時,嘗試向左或向右移動它有點瘋狂。

的jsfiddle:CLICK

+0

我知道你不希望這種行爲,但我喜歡它(就像攀登),我會說http://geekwhisperin.files.wordpress.com/2009/09/ bug-vs-feature.jpg – 2014-10-09 16:19:59

+0

在發佈之前,我想到你說的是什麼,但是..行爲有它自己的想法。從外觀上看,我堅持不懈。 :) – user1885099 2014-10-09 16:39:18

回答

2

的問題是,動畫「高達」是在同一時間執行一次以上。

  1. 按向上鍵 - >mUp變得truemovement被稱爲和 「向上」 的動畫開始。
  2. 按左鍵 - >mLeft變成true,movement被調用,並且因爲mUp仍然爲真,「向上」動畫重新開始。

您應該檢查當您調用移動功能時,如果動畫功能已經在進行中,則動畫不會啓動。

function movement(){ 
    $(function(){ 
     if(mUp && !mUpInProgress){ 
      //... 
     } 
    }); 
} 

JSFiddle