Здравствуйте!
(Это работа с канвасом.)
Есть скрипт для одновременного нажатия клавиш, всё работает, но мне нужно сделать чтобы при нажатии, например, стрелки в верх и влево, эти клавиши срабатывали лишь раз (аналогично и с одной клавишей), т.е. нужно прервать выполнение функции после того как условие выполнится, но такое ощущения, что то условие которое я написал вообще не проверяется - это я думаю, что так надо сделать - надеюсь меня наставят на путь истинный и помогут решить эту головоломку. Другими словами, мне нужно, чтобы "player" перемещался на "speed" или по оси "х", или по "у", или по оси "х - у" одновременно (по диагонали) - нажал клавишу и держи сколько хочешь, но "player" сдвинется только на "speed", нажмёшь ещё раз - сдвинется ещё раз.
Вот скрипты:
Для обработки клавишь:
var keys = {
'W': 87,
'S': 83,
'A': 65,
'D': 68,
'LEFT': 37,
'RIGHT': 39,
'UP': 38,
'DOWN': 40,
'PAUSE': 32
};
var keyDown = {};
var setKey = function (keyCode) {
keyDown[keyCode] = true;
// console.log(keyCode);
};
var clearKey = function (keyCode) {
keyDown[keyCode] = false;
};
var isKeyDown = function (keyName) {
return keyDown[keys[keyName]] == true;
};
var isAnyKeyDown = function () {
for (var k in keyDown) {
if (keyDown[k])
return true;
}
};
window.onkeydown = function (e) {
setKey(e.keyCode);
};
window.onkeyup = function (e) {
clearKey(e.keyCode);
};
То, что должно двигаться по нажатию:
var player = {
level: 1,
hp: 3,
width: 50,
height: 50,
x: 320,
y: 240,
speed: 2,
dx: 0,
dy: 0,
score: 0,
color: randomColor(),
draw: function () {
drawRect(this.x, this.y, this.width, this.height, this.color);
},
// попытка сделать то что задумал:
move: function () {
if (this.x != this.x + this.width ||
this.y != this.y + this.height ||
this.x != this.x - this.width ||
this.y != this.y - this.height) {
if (isKeyDown('LEFT')) {
this.x -= this.speed;
this.dx = -1;
} else if (isKeyDown('RIGHT')) {
this.x += this.speed;
this.dx = 1;
} else {
this.dx = 0
}
if (isKeyDown('DOWN')) {
this.y += this.speed;
this.dy = 1;
} else if (isKeyDown('UP')) {
this.y -= this.speed;
this.dy = -1;
} else {
this.dy = 0;
}
} else {
return;
}
},
init: function (x, y) {
this.x = x;
this.y = y;
}
};