2015-11-08 128 views
0

好的,所以我正在开发一个简单的Agar,但只有2个玩家。我已经获得了大部分基本功能,除非我无法弄清楚如何同时处理来自两个玩家的按键事件。 (一次只能移动一次)这是我的jsFiddle。有关片段:同时收听多个按键事件

if (keysArr.toString() === "37,87") { 
    player.dir = "left"; 
    player2.dir = "up"; 
    keys = []; 
} 

if (keysArr.toString() === "38,87") { 
    player.dir = "up"; 
    player2.dir = "up"; 
} 

if (keysArr.toString() === "39,87") { 
    player.dir = "right"; 
    player2.dir = "up"; 
} 

if (keysArr.toString() === "40,87") { 
    player.dir = "down"; 
    player2.dir = "up"; 
} 

if (keysArr.toString() === "37,65") { 
    player.dir = "left"; 
    player2.dir = "left"; 
} 

if (keysArr.toString() === "38,65") { 
    player.dir = "up"; 
    player2.dir = "left"; 
} 

if (keysArr.toString() === "39,65") { 
    player.dir = "right"; 
    player2.dir = "left"; 
} 

if (keysArr.toString() === "40,65") { 
    player.dir = "down"; 
    player2.dir = "left"; 
} 

if (keysArr.toString() === "37,83") { 
    player.dir = "left"; 
    player2.dir = "down"; 
} 

if (keysArr.toString() === "38,83") { 
    player.dir = "up"; 
    player2.dir = "down"; 
} 

if (keysArr.toString() === "39,83") { 
    player.dir = "right"; 
    player2.dir = "down"; 
} 

if (keysArr.toString() === "40,83") { 
    player.dir = "down"; 
    player2.dir = "down"; 
} 

if (keysArr.toString() === "37,68") { 
    player.dir = "left"; 
    player2.dir = "right"; 
} 

if (keysArr.toString() === "38,68") { 
    player.dir = "up"; 
    player2.dir = "right"; 
} 

if (keysArr.toString() === "39,68") { 
    player.dir = "right"; 
    player2.dir = "right"; 
} 

if (keysArr.toString() === "40,68") { 
    player.dir = "down"; 
    player2.dir = "right"; 
} 

if (keysArr.toString() === "37") { 
    player.dir = "left"; 
} 

if (keysArr.toString() === "38") { 
    player.dir = "up"; 
} 

if (keysArr.toString() === "39") { 
    player.dir = "right"; 
} 

if (keysArr.toString() === "40") { 
    player.dir = "down"; 
} 

我想不出另一种方式,所以我只是用了一堆,如果的。

所以,这段代码可以让两个玩家同时移动,但是在最初的一个之后,他们不能再次转动。我该如何做到这一点,这样既可以同时移动,又可以随后转向?

回答

1

第一个按下的第二个键被检测到,因为另一个玩家会移动。

您必须将所有ELSEIF更改为简单IF。将玩家2 elseif绑定到玩家1如果意味着如果玩家1按下一个键,它将永远不会到达玩家2的elseif状态。这将解决您的主要问题。

document.onkeydown和document.onkeyup侦听器不需要每次重复初始化,只需要一次。

我修改了你的jsFiddle以反映这些变化。然后,我被带走并将代码放在document.onkeyup中,导致玩家停止移动,因为它困扰着我。请享用! https://jsfiddle.net/wtqk7Lu2/1/

if (player2.dir === keys.w) { 
    player2.y -= player2.speed.y; 
} 
if (player.dir === keys.up) { 
    player.y -= player.speed.y; 
} 
if (player2.dir === keys.a) { 
    player2X -= player2.speed.x; 
} 
if (player.dir === keys.left) { 
    player1X -= player.speed.x; 
} 
if (player2.dir === keys.s) { 
    player2.y += player2.speed.y; 
} 
if (player.dir === keys.down) { 
    player.y += player.speed.y; 
} 
if (player2.dir === keys.d) { 
    player2X += player2.speed.x; 
} 
if (player.dir === keys.right) { 
    player1X += player.speed.x; 
} 
+1

完美,谢谢。然而,我重新编辑它以使它继续移动,因为这是使琼脂具有挑战性的原因;你不能停下来。 – Raiden