2015-11-08 3 views
0

Хорошо, поэтому я разрабатываю простой клон Agar, но только с двумя игроками. Я получил большую часть базовой функциональности, но я не могу понять, как обрабатывать события нажатия клавиш одновременно у обоих игроков. (только один может двигаться за раз) Вот мой 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 на просто IFs. Привязка игрока 2 elseif к игроку 1, если это означает, что если игрок 1 нажимает клавишу, он никогда не попадет в состояние elseif игрока 2. Это решит вашу основную проблему.

Воспроизведение 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

Смежные вопросы