我找到了一个脚本,可以处理我正在构建的基于HTML5的小游戏的输入:
var KEY = {W: 87, A: 65, S:83, D: 68, E: 69};
var input = {
right: false,
up: false,
left: false,
down: false,
e: false
};
function press()
{
if (!ni)
{
var evt=window.event;
var code = 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;
}
}
}
function release()
{
if (!ni)
{
evt=window.event;
var code = evt.keyCode;
input.code = code;
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;
}
}
}
这是事件处理程序的分配方式:
document.addEventListener("keydown", press);
document.addEventListener("keyup", release);
当玩家在文本框中输入文本时偶尔显示的变量ni
是真的,我很确定它不会导致问题。此外,这在chrome中完美运行,但正如我所说,在Firefox中不起作用。有人在乎解释原因吗? Firefox版本:10.0.2.4428。
答案 0 :(得分:3)
非标准 window.event
对象仅适用于IE和Chrome。
在符合标准的浏览器中,event
对象作为第一个参数传递给事件侦听器。
变化:
function press() {
if (!ni) {
var evt=window.event;
为:
function press(evt) { // <-- Declaration of evt
if (!ni) {
evt = evt || window.event; // <-- Notice: var is omitted
等效地:
function release(evt) {
答案 1 :(得分:-1)
在Firefox中,您需要使用e.which
代替e.keyCode
。
您可以将其与:
兼容var keyCode = e.which || w.keyCode;