Я пытаюсь сделать многократную проверку комбинации клавиш для теста "маленькой игры". В основном это персонаж из Mortal Kombat, который я перемещаю с помощью клавиш ASDW... но что произойдет, если я захочу укусить и заблокировать одновременно (например, S + K). И я не мог заставить это работать: S
Теперь... не только это, если я нажимаю только S, который будет утка. Затем я нажимаю K (сохраняя S нажатой), он должен блокироваться, когда он уклоняется. Если я выпущу K, он должен продолжать уклоняться. Возможно ли это также?
Как обрабатывать, например, комбинации для выполнения навыков в javascript? Например, если я нажимаю S-, то D-> Punch будет делать навык (не нажатый одновременно, а последовательность)
Есть ли какой-либо возможный способ сделать все это?
Это весь мой код внутри простого HTML, чтобы вы могли его полностью увидеть:
PS: Посмотрите на комментарий в части изображения предварительной загрузки, я имею в виду, анимация изменчивая, пытаясь переместить персонажа из одного пути в другой... почему? Что я делаю не так?
<! DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<style>
#reptile_wrapper {
top: 120px;
left: 140px;
position:relative;
}
#container {
margin-top: 240px;
margin-left: 470px;
width: 890px;
height: 301px; /* entire one 547px */
background: url("img/bgs/pit_background.png") no-repeat;
background-size: 100%;
}
#pit {
top: 0px;
position: relative;
width: 890px;
height: 300px;
background: url("img/bgs/pit.png") no-repeat;
background-size: 100%;
}
#pit_chain {
position: absolute;
width: 150px;
height: 340px;
background: url("img/bgs/pit_chains.png") no-repeat;
margin-left: 695;
}
</style>
</head>
<body>
<audio src="sounds/mk3thepit.mp3" preload="auto" loop="true" autoplay="true" autobuffer></audio>
<div id="pit_chain">
</div>
<div id="container">
<div id="pit">
<div id="reptile_wrapper">
<img src="img/reptile_idle.gif"/>
</div>
</div>
</div>
<script>
/* Preload all the images and gifs */
function preloadImages(srcs, imgs, callback) {
var img;
var remaining = srcs.length;
for (var i = 0; i < srcs.length; i++) {
img = new Image();
img.onload = function() {
--remaining;
if (remaining <= 0) {
callback();
}
};
img.src = srcs[i];
imgs.push(img);
}
}
// then to call it, you would use this
var imageSrcs = ["img", "img/bgs"];
var images = [];
preloadImages(imageSrcs, images, startGame());
/* End of preloading images and gifs */
var duckImages = ["d01", "d02"];
var defaultY = '120px';
reptileIdleAnimation();
function startGame() {
var keys = [];
window.addEventListener("keydown",
function(e){
keys[e.keyCode] = e.keyCode;
var keysArray = getNumberArray(keys);
if(keysArray.toString() == "68"){
$("#reptile_wrapper img").attr('src', 'img/reptile_walk_forward.gif')
.parent().css({left: '+=5px'});
}else if(keysArray.toString() == "17,65"){
// document.body.innerHTML += " Select all!"
}
},
false);
window.addEventListener('keyup',
function(e){
keys[e.keyCode] = false;
reptileIdleAnimation();
},
false);
function getNumberArray(arr){
var newArr = new Array();
for(var i = 0; i < arr.length; i++){
if(typeof arr[i] == "number"){
newArr[newArr.length] = arr[i];
}
}
return newArr;
}
}
</script>
</body>
</html>
Благодарю.
Вам не обязательно полагаться на jQuery для захвата ключей.
Вот простое решение для JavaScript
var keys = [];
document.body.innerHTML = "Keys currently pressed: "
window.addEventListener("keydown",
function(e){
keys[e.keyCode] = e.keyCode;
var keysArray = getNumberArray(keys);
document.body.innerHTML = "Keys currently pressed:" + keysArray;
if(keysArray.toString() == "17,65"){
document.body.innerHTML += " Select all!"
}
},
false);
window.addEventListener('keyup',
function(e){
keys[e.keyCode] = false;
document.body.innerHTML = "Keys currently pressed: " + getNumberArray(keys);
},
false);
function getNumberArray(arr){
var newArr = new Array();
for(var i = 0; i < arr.length; i++){
if(typeof arr[i] == "number"){
newArr[newArr.length] = arr[i];
}
}
return newArr;
}
Как вы можете видеть, одновременное обнаружение нескольких нажатий клавиш и выпусков - это не проблема, технически говорящая.
Я думаю, что единственным виновником браузера здесь (для простого JS) является e.keyCode
. Если вы хотите использовать jQuery, вы можете переписать определения слушателя так, чтобы они использовали jQuery.
В этом вопросе я попросил правильный, но простой предварительный загрузчик изображений.
См. Предоставленный ответ; вы можете использовать этот код для правильной обработки предварительной загрузки.
Надеюсь, это поможет!