2010-08-27 106 views
0

我覺得自己像個完整的klutz,我有這個工作,然後我不小心忘了保存它!我是個白癡。我花了最後一天的時間嘗試重新創造我所擁有的,但我無法做到。基本上(從我的最後一個保存),我有這樣的:用Javascript水平移動

function canvasMove(e) { 

    if(!e) var e = window.event; 

    var downcheck; 
    var upcheck; 
    var leftcheck; 
    var rightcheck; 

    if(e.keyCode == '38') { 

     if(up + down == 0) downcheck = false; 
     else downcheck = true; 

     e.preventDefault(); 

    } 


    if(e.keyCode == '40') { 

     if(up + down > HEIGHT - 110) upcheck = false; 
     else upcheck = true; 
     e.preventDefault(); 
    } 


    if(e.keyCode == '37') { 

     if(left + right == 0) rightcheck = false; 
     else rightcheck = true; 
     e.preventDefault(); 
    } 


    if(e.keyCode == "39") { 
     if(left + right > WIDTH - 110) leftcheck = false; 
     else leftcheck = true; 
     e.preventDefault(); 
    } 

    if(leftcheck == true) { left += 10; counting() }; 
    if(rightcheck == true) { right -= 10; counting() }; 
    if(upcheck == true) { up += 10; counting(true) }; 
    if(downcheck == true) { down -= 10; counting(true) }; 

} 

當然在於Javascrpt不支持,以檢查是否在同一時間被按下兩個鍵的能力的問題。我想要完成的是當用戶按下並離開時,他們會沿着對角線移動。忽略「計數」功能,只是爲了跟蹤用戶移動了多少。

我設法做到這一點,只是其他和如果陳述,不少!所以我想知道你們是否可以一蹴而就。每個關鍵if語句中的第一個if語句如此,用戶不能離開畫布框。然後我有一個通過重畫畫布來移動用戶的函數。

function redraw() { 
    clear(draw); 
    draw.fillStyle = 'rgba(0,0,0,0.5)'; 
    draw.fillRect(left + right, up + down, '100', '100'); 
} 

「清除」功能只是一個簡單的功能,可清除整個畫布。這一切都是由一個初始化函數,看起來像這樣控制:

function init() { 
    canvas = document.getElementById('game'); 
    HEIGHT = canvas.height; 
    WIDTH = canvas.width; 
    draw = canvas.getContext('2d'); 

    setInterval(redraw, 30); 

    document.onkeydown = canvasMove; 
} 
+0

這是什麼問題? – Jerome 2010-08-27 17:58:58

+0

「問題當然是Javascrpt不支持檢查兩個按鍵是否同時按下的功能,我想要完成的是當用戶按下並離開時他們會沿着對角線移動。」 – Johnny 2010-08-27 18:09:59

+0

您是否說過您之前成功地讓瀏覽器識別了多個併發按鍵?目前還不清楚你在找什麼。一些現有的代碼不起作用嗎?如果是這樣,那麼究竟是什麼部分的代碼? – Pointy 2010-08-27 18:46:19

回答

1

你-check標誌必須是全球性的變量,而不是函數範圍的變量,否則他們永遠不會停留的keydown事件(操作只需一個鍵之間設置一次)。您還需要一個keyup事件處理程序,它將在發佈密鑰時取消設置正確的標誌。

+0

該死!我的問題是我沒有意識到全局和局部變量之間的差異。在我的原始版本中,我一直使用全局變量,而在這個版本中,我一直使用本地變量。 你活着學習,呃? – Johnny 2010-08-28 00:35:18