Я делаю свою собственную игру в pac-man, и мне трудно обнаружить столкновение между моим окружающим div и «pac-man».
Вот css для моего персонажа (который сейчас квадратный) и граница, окружающая всю игру.
div#pac{
background-color: white;
width: 35px;
height: 35px;
position: fixed;
left: 90px;
top: 135px;
margin: 2px;
}
div#shell{
border: 1px solid white;
width: 80%;
height: 75%;
top: 85px;
left: 130px;
text-align: center;
position: fixed;
background-color: #DEB887;
}
затем я подумал, что должен показать вам html, хотя он довольно простой
<div id="shell">
<div id="pac"></div>
</div>
наконец-то яваскрипт. вот где начинается проблема, и некоторым может быть довольно сложно следовать. Также я использую свои собственные функции, которые я сделал, называемые getStyle и setStyle, которые делают именно то, что они звучат, как они делают.
//move function for pac-man.
function move() {
var upDown = parseInt(getStyle("pac", "top"));
var leftRight = parseInt(getStyle("pac","left"));
var width = parseInt(getStyle("shell", "width")) - parseInt(getStyle("pac", "width"));
var height = parseInt(getStyle("shell", "height")) - parseInt(getStyle("pac", "height"));
//arrow keys move down
if (arrowKey == 40) {
upDown = upDown + 2;
}
//arrow keys move up
else if (arrowKey == 38) {
upDown = upDown - 2;
}
else if (arrowKey == 37) { //arrow keys move left
leftRight = leftRight - 2;
}
else if (arrowKey == 39) { //arrow keys move right
leftRight = leftRight + 2;
}
if (contains("pac", "shell")) {
//arrow keys bounce from frame down
if (upDown <= 85) {
upDown += 2;
}
else if (upDown >= height + 35) {
upDown += -2;
}
else if (leftRight <= 130){
leftRight += 2;
}
else if (leftRight >= width + 35){
leftRight += -2;
}
}
//update to new location
setStyle("pac", "top", upDown + "px");
setStyle("pac", "left", leftRight + "px");
}
в приведенной выше функции я начинаю с определения моих переменных.
Затем я создаю фактическую функцию движения, чтобы указать ей двигаться в определенном направлении при нажатии определенной клавиши.
затем я провожу тестирование на столкновение, где возникает проблема.
эта проблема очень неустойчива и случайна. когда я запускаю функцию, обнаружение столкновений между верхней и левой частями работает нормально. но когда я пытаюсь перейти к правой или нижней стороне окружающего div, он обрезает меня примерно на 50-80 пикселей.
и вы могли бы подумать, что просто добавьте еще 50-80 пикселей к обнаружению, но НЕТ, тогда это становится еще более странным, потому что, если я добавлю к нему еще пикселей, обнаружение столкновений просто исчезнет, и pac-man сможет взлететь прямо с места. экран, как будто там вообще нет div
пожалуйста, кто-нибудь, я пытался решить эту проблему в течение 2 дней, и я не могу найти решение. Я упускаю что-то очевидное? Я попытался изменить некоторые элементы css на такие вещи, как относительная позиция, а также левый и верхний атрибуты, но ничего не помогло.
полный исходный код и включенная библиотека (которая имеет функции getStyle и setStyle ниже) https://github.com/nicholaskorte/Javascript-pac-man-game/tree/master