gpt4 book ai didi

javascript - 如何处理2D平台游戏中的复杂输入?

转载 作者:太空宇宙 更新时间:2023-11-04 15:45:59 25 4
gpt4 key购买 nike

我正在尝试使用 JavaScript 在 2D 平台游戏中为我的 Angular 色添加键盘控制。 Angular 色可以行走、冲刺和跳跃。这是我当前的代码:

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() 语句,而且似乎我需要控制键盘输入的顺序。有没有一种简单的方法可以处理这个问题?我走的路正确吗?如果没有,实现这一目标的常用方法是什么?请,任何帮助将不胜感激。

最佳答案

好吧,我会尽量保持简短,因为我是 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.jsjwerty.jskeypress.jshere .

关于javascript - 如何处理2D平台游戏中的复杂输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569680/

25 4 0
文章推荐: c++ - 为什么我的字符串无法在 C++ 中正确打印?
文章推荐: html - 什么可能导致 CSS id 链接的 "border"属性被完全忽略?
文章推荐: javascript - 将 用于 SVG 并从 HTML 内联 css 以编辑填充
文章推荐: C++ 数组包装器