2011-04-14 65 views
0

我想做一個小小的pacman遊戲來訓練我的JavaScript技能。爲了移動pacman,我使用與移動功能相關的onkeyup事件函數。警報彈出後沒有返回焦點到瀏覽器

我仍然有問題。每當pacman死亡(或遊戲結束)時,我總是使用警告框來提醒用戶發生了什麼。儘管如此,在按下OK按鈕讓pacman再次移動之後,我必須點擊瀏覽器窗口才能響應鍵盤事件。

不知怎的,我相信這是一個窗口焦點問題,仍嘗試使用一些焦點(主要在警告框之後),而且似乎沒有辦法。

有人可以給我一般指針什麼可能是解決方案嗎?

PS:在遊戲構造中,我使用的是動態創建的圖像,在頁面上只有2個帶有ID的文本標籤。

編輯:在的onkeyup相關聯的代碼:

功能muda_sentido(事件) {

//baixo 
    if(event.keyCode == 40) 
    { 
     pacman_status = status[2]; 
     imagem_pacman.src = "Imagens/pacmanb.gif"; 
     imagens[pacman_pos[0]][pacman_pos[1]].src = "Imagens/pacmanb.gif"; 
    } 
    //direita 
    else if(event.keyCode == 39) 
    { 
     pacman_status = status[0]; 

     imagem_pacman.src = "Imagens/pacmand.gif"; 
     imagens[pacman_pos[0]][pacman_pos[1]].src = "Imagens/pacmand.gif"; 
    } 
    //cima 
    else if(event.keyCode == 38) 
    { 
     pacman_status = status[3]; 
     imagem_pacman.src = "Imagens/pacmanc.gif"; 
     imagens[pacman_pos[0]][pacman_pos[1]].src = "Imagens/pacmanc.gif"; 
    } 
    //esquerda 
    else if(event.keyCode == 37) 
    { 
     pacman_status = status[1]; 
     imagem_pacman.src="Imagens/pacmane.gif" 
     imagens[pacman_pos[0]][pacman_pos[1]].src = "Imagens/pacmane.gif"; 
    } 

}

html正文內容是雙H2標籤(可以不加它代碼格式導致它出現在預覽器上)每個ID都有一個ID。

和周圍的節目,我有類似:

警報( 「吃豆子死了!」)

而且問題是在這之後。

2編輯:設法抓住了一段代碼,位於提示框(只是改變了,現在看它在只有一個地方):

功能pacman_morreu() {

alert("O pacman morreu!"); 

    if(pacman_vidas==0) 
    { 
     alert("Game Over!"); 
     reinicia_tabuleiro(); 

    } 
    else 
    { 
     pacman_vidas--; 
     vidas.innerHTML = "Número de vidas: "+ pacman_vidas; 
    } 
    pintaEcra(); 
} 

代碼中列出的功能只會做矩陣操作操作(沒有什麼特別的)。

編輯3:按照要求,這裏有雲:

功能reinicia_tabuleiro(){

pacman_vidas = 3; 
    vidas.innerHTML = "Número de vidas: 3"; 
    pontuacao.innerHTML = "Pontuação: 0"; 
    pontos = 0; 
    for(i=1;i<24;i++) 
    { 
     for(j=1;j<24;j++) 
     { 
      if(tabuleiro[i][j] == 0) 
       tabuleiro[i][j] = 2; 
     } 
    } 


} 
+0

你能爲此發佈js代碼嗎? – 2011-04-14 00:23:31

+0

你的'onkeyup'事件綁定到'window'嗎? – Eliasdx 2011-04-14 00:23:58

+0

和你的w/e你的onkeyup事件的html與 – 2011-04-14 00:29:42

回答

0

對不起,夥計,我沒有看到任何會引起此。你使用的是什麼瀏覽器?我在IE和FF上做類似的測試,並在點擊警告框中的「確定」後獲得窗口焦點。你有沒有試過使用Firebug?這是一個偉大的程序調試JavaScript。我會高度推薦它用於你正在做的這個pacman項目。您的代碼中可能有一處錯誤,導致這種情況在上面顯示的代碼中不太明顯。

+0

我在FF4上測試,不幸的是我不能有螢火蟲運行vause它有新版本的內存泄漏....不管怎樣,我會盡力解決這個問題奇怪的問題 – John 2011-04-15 00:25:32

+0

好吧,如果你想出一個帖子:)祝你好運! – 2011-04-15 16:08:52

0

我剛剛通過類似的問題與keydown和Firefox 5.0。當頁面加載和所有我的$(window).keydown(...)事件都正常工作時,該窗口關注。

然後,在我顯示警報後,沒有任何事件觸發。結果是,在我關閉警報後,窗口不會自動關注。我能夠通過強制窗口在模糊時重新調整焦點來解決問題。我使用jQuery所以這裏是它看起來就像是我:

$(window).blur(function(){ 
    setTimeout(function(){ 
     $(window).focus(); 
    }, 0); 
}); 

超時是必要的,因爲火狐(&也許其他瀏覽器)不會讓你一個模糊事件時立即關注。

這可能會產生意想不到的後果,因爲您基本上不會讓窗口模糊。例如,單擊地址欄將不會工作,因爲該窗口立即將焦點拉回。要挖掘更深的洞,您可以爲您的回調設置「重新聚焦」標誌,以便知道是否放棄焦點。這裏的基本思路:

var doRefocusWindow = false; 

$(window).blur(function(){ 
    if(!doRefocusWindow) return; 
    doRefocusWindow = false; 
    setTimeout(function(){ 
     $(window).focus(); 
    }, 0); 
}); 

... 

doRefocusWindow = true; 
alert("Game Over"); 
0

那麼現在,我沒有解決這個問題,但我有一個解決方法。 不要使用alertbox,使用lightbox(具有更高z-index值的div),並根據javascript中的條件使div顯示和隱藏。 我希望這會有所幫助。

相關問題