Я пытаюсь сделать небольшую игру только для удовольствия, когда у меня есть проблемы с конфликтами.обнаружение коллизий между моим игроком и блоком из 2d-массива
У меня есть игрок, нарисованный на холсте, и некоторые блоки (16 x 16 пикселей), нарисованные на другом холсте.
Но у меня есть проблема с обнаружением горизонтальных столкновений.
...
Моя проблема сводится к следующему:
Мой игрок использует х у координаты, которые хранятся в виде:
var p_x; var p_y;
этих значений игроки слева внизу координаты в пикселях.
Но мои блоки в 2D-массив под названием:
var g_levelarray;
И каждый блок 16 х 16 точек так, например, если я делаю:
g_levelarray[3][2] = 1;
означает, что блок будет нарисован на холсте слева: 48px и холст нижней 32px
...
Но тогда у меня есть мой код, чтобы проверить, если блок существует (в соответствии с игроком), где х и у является playercoordinates
function blockexists(x, y) {
var xpos = parseInt(x/g_blocksize);
var ypos = parseInt(y/g_blocksize);
$("#checkedblock").html("checked block: " + xpos + " " + ypos);
if (g_levelarray[xpos][ypos] != undefined) {
return true;
}
else {
return false;
}
}
но что проверка имеет некоторые ошибки из-за того, что она округляет число так, когда я ударил блок от половины до вершины (как как показано на рисунке ниже), он позволяет игроку войти внутрь блока.
the error i have http://userhome.org/test/error.png
я также попытался Math.round вместо ParseInt, но это только делает проблему на игроков посередине.
Так как я могу написать этот код правильно, чтобы мой плеер не попал в блок?
ТНХ заранее
Если 'g_levelarray [xpos] [ypos]' представляет строку, то что входит в метод 'indexOf()' n ваш код? –
Я думаю, что сначала не понял вас, но да, я понимаю. Индекс кода неверен. Он должен быть indexOf ('t') == -1. Лол. Но все же не проблема, хотя :) но я только что удалил это на данный момент. – JohnMalkowich
'return g_levelarray [xpos] [ypos]! = Undefined' будет чище. – Shikiryu