我试图在Android上移植游戏,在游戏中玩家按空间跳转,当用户触摸屏幕时,我找不到任何可用的解决方案来模拟空格键事件
这是我迄今为止找到的代码:
/**
* Keep track of the spacebar events
*/
var KEY_CODES = {
32: 'space'
};
var KEY_STATUS = {};
for (var code in KEY_CODES) {
if (KEY_CODES.hasOwnProperty(code)) {
KEY_STATUS[KEY_CODES[code]] = false;
}
}
document.onkeydown = function(e) {
var keyCode = (e.keyCode) ? e.keyCode : e.charCode;
if (KEY_CODES[keyCode]) {
e.preventDefault();
KEY_STATUS[KEY_CODES[keyCode]] = true;
}
};
document.onkeyup = function(e) {
var keyCode = (e.keyCode) ? e.keyCode : e.charCode;
if (KEY_CODES[keyCode]) {
e.preventDefault();
KEY_STATUS[KEY_CODES[keyCode]] = false;
}
};
document.addEventListener("touchstart", function(e) {
document.onkeydown({ keyCode: 32 });
});
document.addEventListener("touchend", function(e) {
document.onkeyup({ keyCode: 32 });
});
我不明白为什么这不起作用......
然后这个:
// jump higher if the space bar is continually pressed
if (KEY_STATUS.space && jumpCounter) {
player.dy = player.jumpDy;
}
以上是使用空格键事件的所有代码
答案 0 :(得分:1)
您需要从事件中获取keyCode,尝试编写
({ e.keyCode: 32});
答案 1 :(得分:1)
你可以定义一个处理程序然后包装跳转函数。用所需的事件解雇它。例如:
function jump(keyEvent) { /* code to jump*/}
这是一个坏主意,但它可以为你工作。这样你就不必担心preventDefault方法了。
function jumpHandler(e) { e.keyCode = 32; jump(e) /*object to simulate the keydown event object*/ }
为了避免操纵事件对象,你可以传递一个空函数,就像你传递keyCode属性一样。但是你将失去preventDefault功能。
function jumpHandler() { jump({keyCode:32, preventDefault: function(){}}) /*object to simulate the keydown event object*/ }
document.addEventListener('touchstart', jumpHandler);
document.onKeydown = jump // here just the reference to the handler
有些时候,函数结尾处的returnig false可能具有相同的preventDefault行为,我告诉你这是否要返回false而不是调用preventDefault。
:)