我正在尝试使用JavaScript在2D平台游戏中为我的角色添加键盘控制。角色可以walk, dash and jump
。这是我目前的代码:
if(keyboard['LEFT']) {
//walk to left
//...
} else if (keyboard['RIGHT']) {
//walk to right
if(keyboard['SHIFT'] && !jump) {
//dash
}
if(keyboard['JUMP']) {
//jump to right
}
if(keyboard['SHIFT'] && keyboard['JUMP']) {
//dash and jump (move further and faster)
}
if(keyboard['JUMP'] && keyboard['SHIFT']) {
//hold the right key, pressed jump key, and then pressed shift key
//it expected to jump to right here, because character can not dash
//in midair, but it will conflict the if condition above.
}
} else if (keyboard['JUMP'] && onGround) {
//jump
} else if (keyboard['SHIFT']) {
//dash
if(keyboard['JUMP']) {
//dash and jump
}
}
我很困惑我的代码中有很多if()else()语句,似乎我需要控制键盘输入的顺序。是否有一种简单的方法来处理它?我是否正确的方式?如果没有,实现这一目标的常用方法是什么?请,任何帮助将不胜感激。
答案 0 :(得分:1)
好的,我会尽量保持这个简短,因为我是JS的菜鸟。以下答案基于jQuery而不是原始JS 你在这里尝试做的基本上是处理多个击键,所以你可以尝试如下:
var map = {}; // You could also use an array
onkeydown = onkeyup = function(e){
e = e || event; // to deal with IE
map[e.keyCode] = e.type == 'keydown';
/* Put your conditional statements here */
}
现在,在放置条件语句的位置,您可以使用switch case
或使用if..else
。如下所示:
if(map[17] && map[16] && map[65]){ // CTRL+SHIFT+A
alert('Control Shift A');
}else if(map[17] && map[16] && map[66]){ // CTRL+SHIFT+B
alert('Control Shift B');
}else if(map[17] && map[16] && map[67]){ // CTRL+SHIFT+C
alert('Control Shift C');
}
注意 this是我从中提取上述代码段的最佳答案。
我建议你仔细阅读答案,因为它已经详细解释,并且有很多错误修复和改进,当你在开发游戏的过程中肯定会帮助你。请务必阅读评论。
更新:
假设您匆忙或者不想编写自己的代码然后进行测试和调试,那么还有很多其他的js库可以让您的生活更轻松一些。其中一些是 mousetrap.js , jwerty.js , keypress.js 等列出here。