Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   обработка одновременно двух клавиш клавиатуры (https://javascript.ru/forum/events/2363-obrabotka-odnovremenno-dvukh-klavish-klaviatury.html)

Destrifer 13.12.2008 18:29

обработка одновременно двух клавиш клавиатуры
 
в браузере возможна?
Это:
<script type="text/javascript">
  document.onkeydown = function(e) {
    e = e || window.event;
    if (e.shiftKey && e.keyCode == 65) {
      alert('Shift + A');
    }
    return true;
  }
</script>

не дает должного эффекта.

Octane 13.12.2008 18:36

Все работает

Destrifer 13.12.2008 18:55

Вот:
<html>
<head>
<style>
.gameLayer {position: absolute; top: 0px; left: 0px;}
</style>
<script>
knight = new Image(30,30);
knight.src = '1.png'
var knightObj = {x: 30, y:60};

function init(){
	drawKnight();
}

function drawKnight(){
	var ctx = document.getElementById('playerLayer').getContext("2d");
	ctx.drawImage(knight, knightObj.x, knightObj.y);
}

document.onkeydown = function(e) {
	var ctx = document.getElementById('playerLayer').getContext("2d");
	ctx.clearRect(knightObj.x,knightObj.y,25,30);
    e = e || window.event;
    if (e.keyCode == 38 && e.keyCode == 39) {
      	knightObj.x-=2;
		knightObj.y-=2;
    }
	drawKnight();
}

</script>
</head>
<body onload="init()">
<canvas id="playerLayer" class="gameLayer" height="160" width="300"></canvas>
</body>
</html>

Если оставить одну клавишу - работает, две - нет.

Андрей Параничев 13.12.2008 19:00

Destrifer,
e.keyCode == 38 && e.keyCode == 39

Как вы себе представляете равенство одной переменной сразу двум значениям?

Вам нужно в обработчике снимать/поднимать флаг при нажатии/отпускании клавиши с keyCode 38 и обрабатывать событие нажатия клавиши с keyCode 39, при условии поднятого флага.

Destrifer 13.12.2008 19:07

Ясно, спасибо.
p.s. И все же не ясно:
Цитата:

Сообщение от Андрей Параничев
снимать/поднимать флаг при нажатии/отпускании клавиши

Если я отпускаю первую клавишу (поднимаю флаг), чтобы обработать нажатие второй, то это уже не есть нажатие двух клавиш.

vk65535 17.12.2008 12:39

Когда нажимаешь одну кнопку - поднимается один флаг, когда отпускаешь - опускается. Если нажмешь вторую, поднимется другой флаг. Если первая все еще нажата - подняты оба флага - значит обе кнопки одновеменно нажаты.

Kolyaj 17.12.2008 12:48

Цитата:

Сообщение от vk65535
Если первая все еще нажата - подняты оба флага - значит обе кнопки одновеменно нажаты.

http://ru.wikipedia.org/wiki/%D0%A0%...83%D0%BA%D0%B0

vk65535 17.12.2008 13:12

Ну, да, примерно такие ассоциации у меня и возникали, когда это писал :D

Destrifer 20.12.2008 15:25

Цитата:

Сообщение от vk65535 (Сообщение 9644)
Когда нажимаешь одну кнопку - поднимается один флаг, когда отпускаешь - опускается. Если нажмешь вторую, поднимется другой флаг. Если первая все еще нажата - подняты оба флага - значит обе кнопки одновеменно нажаты.

Ага, вот это уже ближе к истине, спасибо


Часовой пояс GMT +3, время: 17:36.