2015-11-26 73 views
1

我創建一個帆布遊戲的樂趣,我想重新考慮我的多個其他一些if語句,而不是使用對象查找表。Javascript查找表vs其他如果和多個匹配結果

這是我上的keydown分配變量值電流代碼:

function keyDown(e) { 
    keypressed = true; 

    if (e.keyCode == 39 || e.keyCode == 68) {rightKey = true; } 
    else if (e.keyCode == 37 || e.keyCode == 65) {leftKey = true;} 
    else if (e.keyCode == 38 || e.keyCode == 87) {upKey = true; } 
    else if (e.keyCode == 40 || e.keyCode == 83) {downKey = true; } 
    else if (e.keyCode == 80) { isPaused = !isPaused; document.body.classList.toggle('pause'); } 

    if (e.keyCode === 69) { startHit(); } 
} 

我想分配既WSAD鍵和方向鍵做同樣的事情,所以在使用的||在條件允許的情況下。

,我讀了使用對象文本查找表來實現這個更快的方式,這是我的嘗試:

var codes = { 
    39 : function() { 
     return rightKey = true; 
    }, 
    37 : function() { 
     return leftKey = true; 
    }, 
    38 : function() { 
     return upKey = true; 
    }, 
    40 : function() { 
     return downKey = true; 
    }, 
    80 : function() { 
     isPaued = !isPaused; 
     document.body.classList.toggle('pause'); 
    }, 
    69 : startHit 
} 

codes[68] = codes[39]; 
codes[65] = codes[37]; 
codes[87] = codes[38]; 
codes[83] = codes[40]; 

function keyDown(e) { 
    keypressed = true; 
    codes[e.keyCode](); 
} 

這只是正常的,但我不知道底部按鍵的分配是做到這一點的最佳方式?我顯然不能使用||操作員在左手任務中,那麼是否有更乾淨的方式來做到這一點,還是應該堅持其他ifs?

此外,我知道我可以使用switch語句,但我覺得它會看起來類似於我上面所做的。

任何建議將是偉大的。謝謝。

回答

1

爲什麼不使用switch聲明?

function keyDown(e) { 
    keypressed = true; 
    switch (e.keyCode) { 
     case 39: 
     case 68: 
      rightKey = true; 
      break; 
     case 37: 
     case 65: 
      leftKey = true; 
      break; 
     case 38: 
     case 87: 
      upKey = true; 
      break; 
     case 40: 
     case 83: 
      downKey = true; 
      break; 
     case 80: 
      isPaused = !isPaused; 
      document.body.classList.toggle('pause'); 
      break; 
     case 69: 
      startHit(); 
    } 
} 
+1

完全相同這看起來像一個不錯的解決方案。我不知道我可以在每種情況下將兩種情況結合在一起! (儘管switch語句看起來有點奇怪:D) –

1

這個怎麼樣?

var codes = function(){ 
    function rightKey(){ 
    rightKey = true; 
    } 

    function leftKey() { 
    leftKey = true; 
    } 

    return { 
    39 : rightKey, 
    37 : leftKey, 
    '...': '...', 
    68 : rightKey, 
    65 : leftKey 

}}() 
+0

是的,我認爲這樣的事情會是這樣做的。我唯一擔心的是重複值的重複部分 - 39:rightKey,68:rightKey。這樣做現在不會使代碼比if語句更冗長嗎?還是這樣會更有效?雖然我們在效率上,但我們在這裏調用函數來返回keyValue;在調用函數或評估if語句時開銷最大? –

+0

IF語句應該更快。但是,起初我認爲現代js引擎可以優化這樣的函數調用,並且它的效率幾乎相同,其次是您確定需要如此低級別的優化? – nahab

+0

<重複值 - 39:rightKey,68:rightKey>效率與您提議的變體 – nahab

相關問題