2012-05-25 38 views
4

我正在用Three.js製作遊戲,我需要獲取用戶輸入。我有兩個處理函數;在全屏時捕捉鍵盤輸入似乎不起作用

function press(evt) 
{ 
    console.log(evt); 

    //evt = window.event; 
    var code = evt.which || evt.keyCode; 

    switch(code) 
    { 
     case KEY.W: input.up = true; break; 
     case KEY.A: input.left = true; break; 
     case KEY.S: input.down = true; break; 
     case KEY.D: input.right = true; break; 
     case KEY.E: input.e = true; break; 
     case KEY.Z: input.z = true; break; 
     case KEY.ONE: input.one = true; break; 
     case KEY.CTRL: input.ctrl = true; break; 
     case KEY.P: input.plus = true; break; 
     case KEY.M: input.minus = true; break; 
     case KEY.SH: input.shift = true; break; 
    } 
} 

function release(evt) 
{ 
    console.log(evt); 

    //evt = window.event; 
    var code = evt.which || evt.keyCode; 

    switch(code) 
    { 
     case KEY.W: input.up = false; break; 
     case KEY.A: input.left = false; break; 
     case KEY.S: input.down = false; break; 
     case KEY.D: input.right = false; break;   
     case KEY.E: input.e = false; break; 
     case KEY.Z: input.z = false; break; 
     case KEY.ONE: input.one = false; break; 
     case KEY.CTRL: input.ctrl = false; break; 
     case KEY.P: input.plus = false; break; 
     case KEY.M: input.minus = false; break; 
     case KEY.SH: input.shift = false; break; 
    } 
} 

這兩個我用於其他項目,他們工作正常。這是我如何附加事件監聽器:

document.addEventListener("keydown", press, false); 
document.addEventListener("keyup", release, false); 

這適用於網站正常加載時,但在網站全屏顯示時不起作用!

這是init()中的while設置;函數被調用的身體onload事件:

 var init = function() 
     { 
      started = false; 
      isFullscreen = false; 

      changeFSState = function() 
      { 
       if (isFullscreen == true) 
       { 
        isFullscreen = false; 

        game.stop(); //lol 
       } 
       else 
       { 
        isFullscreen = true; 
       } 
      } 

      container = document.getElementById("container"); 
      document.body.appendChild(container); 

      document.addEventListener("keydown", press, false); 
      document.addEventListener("keyup", release, false); 

      document.addEventListener("webkitfullscreenchange", changeFSState, false); 
      document.addEventListener("mozfullscreenchange", changeFSState, false); 

      game = new Game(container); 
     } 

一旦play按鈕被點擊,出現這種情況:

THREEx.FullScreen.request(self.container); 
    self.renderer.setSize(screen.width, screen.height); 

現在,正如我所說,抓住投入工作,直到我點擊play按鈕(鏈接,實際上),然後控制檯停止記錄事件,就好像它們沒有發生一樣。

回答

4

THREEx.FullScreen似乎使用此代碼:

element.webkitRequestFullScreen(); 

而且你需要的是這樣的:

element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); 

好像this is Chrome-only雖然。

+0

呵呵,有沒有Firefox的選擇? – corazza