2011-04-14 2 views
0

자바 스크립트 기술을 훈련시키기 위해 소형 팩맨 게임을하려고합니다. 팩맨을 움직이려면 move 함수와 관련된 onkeyup 이벤트 함수를 사용합니다.경고 팝업 후 브라우저로 포커스를 되 돌리지 않음

여전히 문제가 있습니다. 팩맨이 죽을 때마다 (또는 게임이 종료 될 때마다) 나는 항상 경고 상자를 사용하여 사용자에게 무슨 일이 일어 났는지 알려줍니다. 그래도 팩맨을 다시 움직이게하기 위해 OK 버튼을 누르면 키보드 이벤트에 반응하도록 브라우저 창을 클릭해야합니다.

여하튼 나는 이것이 윈도우 포커스 문제라고 생각한다. (주로 경고창 이후에) 초점을 맞추려고 시도했지만 트릭을하지 않는 것 같다.

누군가가 내게이 해결책이 될 수있는 일반적인 포인터를 줄 수 있습니까?

추 신 : 게임 제작시 나는 ID 태그가있는 페이지에 텍스트 태그가 2 개만있는 상태에서 이미지를 사용하고 있습니다.

편집 : 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를 각각). ("! 팩맨 사망")

그리고 문제는이 이후

경고 :

그리고 프로그램의 주위에

내가 좋아하는 뭔가가있다.

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 코드를 게시 할 수 있습니까? –

+0

'onkeyup' 이벤트가'window'에 묶여 있습니까? – Eliasdx

+0

그리고 당신의 on/off 이벤트에 대한 html은 –

답변

0

죄송합니다 친구는,이 원인이 될 것 아무것도 표시되지 않습니다. 어떤 브라우저를 사용하고 있습니까? 나는 IE와 FF에 대해서 비슷한 테스트를하고 있으며 경고창에서 '확인'을 클릭하면 윈도우 포커스를 얻고있다. Firebug을 사용해 보셨습니까? 그것은 자바 스크립트를 디버깅하기위한 훌륭한 프로그램입니다. 나는 당신이하고있는이 팩맨 프로젝트에 그것을 매우 추천 할 것입니다. 코드의 어딘가에서 위의 코드에서 명확하지 않은 오류가 발생할 수 있습니다.

+0

FF4에서 테스트 중이며 불행히도 firebug를 실행할 수 없어서 새 버전에서 메모리 누출이 발생합니다 .... 어쨌든이 문제를 해결하려고 노력할 것입니다. 이상한 문제 – John

+0

좋아, 그것을 알아낼 경우 게시물을 만드십시오 :) 행운을 빌어 요! –

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

글쎄 지금은이 문제에 대한 해결책이 없지만 해결책이 있습니다. 경고 상자를 사용하지 말고 라이트 박스 (z- 인덱스 값이 더 높은 div)를 사용하고 javascript의 조건에 따라 div를 표시하고 숨 깁니다. 도움이되기를 바랍니다.

관련 문제