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
按鈕(鏈接,實際上),然後控制檯停止記錄事件,就好像它們沒有發生一樣。
呵呵,有沒有Firefox的選擇? – corazza