2015-08-17 40 views
0

我建立一個虛擬搖桿,這是我做,這樣,當操縱桿處於某個值之間的x和y的值將保持在一定值,例如遞增當操縱桿之間1部分的代碼而對於deltaX,它會每秒增加一次,或者如果它在21到40之間,它會每秒增加兩次,我希望它保持遞增,而不是保持相同的值。當我嘗試這個代碼時,y值只是堅持1,2或3,並且不增加,有誰能提出爲什麼會發生這種情況?爲什麼x&y值不會增加?

編輯: 通過if語句需要是功能操縱桿斷裂外,如果其內部不運行。

 if (joystick.deltaX() >= 1 && joystick.deltaX() <= 20) { 
      (function movex1() { 
       x = x + 1; 
       setTimeout(movex1, 1000); 
      })(); 
     } 

     if (joystick.deltaX() >= 21 && joystick.deltaX() <= 40) { 
      (function movex2() { 
       x = x + 2; 
       setTimeout(movex2, 1000); 
      })(); 
     } 

     if (joystick.deltaX() >= 41 && joystick.deltaX() <= 60) { 
      (function movex3() { 
       x = x + 3; 
       setTimeout(movex3, 1000); 
      })(); 
     } 

     if (joystick.deltaY() >= 1 && joystick.deltaY() <= 20) { 
      (function movey1() { 
       y = y + 1; 
       setTimeout(movey1, 1000); 
      })(); 
     } 

     if (joystick.deltaY() >= 21 && joystick.deltaY() <= 40) { 
      (function movey2() { 
       y = y + 2; 
       setTimeout(movey2, 1000); 
      })(); 
     } 

     if (joystick.deltaY() >= 41 && joystick.deltaY() <= 60) { 
      (function movey3() { 
       y = y + 3; 
       setTimeout(movey3, 1000); 
      })(); 
     } 
+2

[不要重複自己!(https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) – undefined

+0

當所有這些if語句觸發/執行? – moffeltje

+0

警告:一旦觸發,它們將永不停止 –

回答

0

當你的代碼執行,joystick.deltaX()和joystick.deltaY()更可能有0值,所以沒有超時設置過。

此外,避免這麼多IFS時,你可以用一個師替換它們。

爲什麼不使用的間隔?

var x = 0, y = 0; 

// Execute every second 
var intervalId = setInterval(function() { 
    x += Math.ceil(joystick.deltaX()/20); 
    y += Math.ceil(joystick.deltaY()/20); 
}, 1000); 

// Stop after 20 seconds 
setTimeout(function() { 
    clearInterval(intervalId); 
}, 20000) 
+0

感謝這個工程好得多,我的代碼,唯一的問題是它不會每秒都這樣做,它幾乎是瞬間的,所以它會變成1000大約2秒。 – Vivek

+0

每當遊戲杆移動時,您最有可能正在執行這段代碼(每次移動時都會設置一個計時器) – Eloims

相關問題