Я создаю игру, в которой пользователь бродит по кладбищу и собирает истории из разных могил.Это классическая игра сверху вниз.Я создаю сценарий, в котором, если пользователь заходит в могилу, его движение прекращается, но у меня возникают проблемы при настройке столкновений.Я использую JQuery.Вот что у меня получилось:
var position = -1;
var $char = $('#char');
var keyCode = null;
var fired = false;
var $stones = $('.stones div');
var collision = null;
document.onkeydown = function(e) {
keyCode = e.which || e.keyCode;
if (!fired) {
position = -1;
fired = true;
switch (keyCode) {
case 38: position = 0; break; //up
case 40: position = 1; break; //down
case 37: position = 2; break; //left
case 39: position = 3; break; //right
}
walking();
stepping = setInterval(walking,125);
}
};
document.onkeyup = function(e) {
//standing
clearInterval(stepping);
stepping = 0;
fired = false;
};
function walking() {
$stones.each(function() { //check all the stones...
collision = collision($(this), $char, position); ...for collisions
if (collision) { //if any, then break loop
return false;
}
});
if (!collision) { //check if there was a collision
//if no collision, keep walking x direction
}
function collision($el, $charEl, position) {
var $el = $el[0].getBoundingClientRect();
var $charEl = $charEl[0].getBoundingClientRect();
var elBottom = parseInt($el.bottom);
var elRight = parseInt($el.right);
var elLeft = parseInt($el.left);
var elTop = parseInt($el.top);
var charBottom = parseInt($charEl.bottom);
var charRight = parseInt($charEl.right);
var charLeft = parseInt($charEl.left);
var charTop = parseInt($charEl.top);
//this is where I'm stuck
}
}
Я пробовал разные коды, но, похоже, ничего не работает.У меня продолжает возникать проблема, когда я иду вперед, а затем сталкиваюсь с надгробием и оборачиваюсь, я застреваю.Вот пример кода того, что я имею в виду:
if (position == 0 &&
!(elTop > charBottom ||
elBottom < charTop ||
elRight < charLeft + 1 ||
elLeft > charRight - 1)
) {
return true;
}
if (position == 1 &&
!(elTop > charBottom ||
elBottom < charTop ||
elRight < charLeft + 1 ||
elLeft > charRight - 1)
) {
return true;
}
return false;
![enter image description here](https://i.stack.imgur.com/fHosJ.gif)
Я посмотрел этот вопрос и этот вопрос и этот вопрос и пока мне не повезло.Может кто-нибудь помочь мне с логикой или предоставить пример кода того, что мне нужно сделать?
Спасибо.