我正在尝试做一个小的pacman游戏来训练我的JavaScript技能。为了移动pacman,我使用与移动函数关联的onkeyup事件函数。
我还有问题。每当pacman死亡(或游戏结束)时,我总是使用警报框提醒用户发生的事情。仍然,按下OK按钮使pacman再次移动后,我必须单击浏览器窗口以使其响应键盘事件。
不知怎的,我相信这是一个Windows焦点问题,仍然,试图使用一些焦点(主要是在警报框之后)并且似乎没有做到这一点。
有人可以给我一些关于这个解决方案的一般指示吗?
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。
在程序中我有类似的东西:
警告(“吃豆子死了!”)
问题出在此之后。
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:根据要求,这里是:
function 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 :(得分:0)
答案 1 :(得分:0)
我刚刚遇到了keydown和Firefox 5.0的类似问题。当页面加载并且我的所有$(window).keydown(...)
事件都正常工作时,窗口会聚焦。
然后在我显示警报后,没有事件发生。在我解除警报后,窗口不会自动聚焦。我能够通过强制窗口在模糊时重新聚焦来解决它。我使用jQuery所以这就是我的样子:
$(window).blur(function(){
setTimeout(function(){
$(window).focus();
}, 0);
});
超时是必要的,因为Firefox(及其他浏览器)不会让你在模糊事件中立即聚焦。
这可能会产生意想不到的后果,因为您基本上不会让窗口模糊。例如,单击位置栏甚至无法工作,因为窗口会立即拉回焦点。要挖一个更深的洞,你可以设置一个重新聚焦&#34;你的回调标志,所以它知道是否放弃焦点。这是基本的想法:
var doRefocusWindow = false;
$(window).blur(function(){
if(!doRefocusWindow) return;
doRefocusWindow = false;
setTimeout(function(){
$(window).focus();
}, 0);
});
...
doRefocusWindow = true;
alert("Game Over");
答案 2 :(得分:0)
那么现在,我没有解决这个问题,但我有一个解决方法。 不要使用alertbox,使用lightbox(具有更高z-index值的div)并根据javascript中的条件进行div显示和隐藏。 我希望这会有所帮助。