обработка пересечения двух прямоугольников в платформере - PullRequest
1 голос
/ 31 марта 2011

Я работаю над простой платформенной игрой на HTML5 / Canvas / Javascript / jQuery.Вы можете видеть это здесь .

Я знаю, как проверить пересечение двух прямоугольников (здесь есть несколько вопросов относительно этого), и моя игра проверяет и обрабатывает пересечениеиз двух прямоугольников, но только при очень определенных обстоятельствах, и только потому, что символ не шире, чем мой блок.

Мой вопрос: как я могу вычислить пересечение двух прямоугольников таким образом, который я могу сказать, какиенаправление пересечения происходит?Единственный способ, о котором я могу думать, включает в себя 20+ операторов if (это не может быть правильным способом?).

Мне нужно знать направление пересечения, потому что я «заглядываю» вперед, чтобы увидеть, совпадают ли координаты моего спрайта (x+ dx, y + dy) будет пересекать прямоугольник, и, если они это сделают, установите новые координаты спрайта равными краю прямоугольника на следующем тике.

1 Ответ

2 голосов
/ 31 марта 2011

Чтобы получить положение прямоугольника относительно другого, вы можете использовать центр прямоугольника спрайта и получить его положение относительно блока.
Следующая функция - получить позицию точки в другой. Это должно помочь вам. Просто нужно адаптироваться, чтобы проверить положение вашего спрайта в вашем блоке, используя центр спрайта и центр блока (или проверить положение центра спрайта в верхнем левом и нижнем правом углах блока)

function positionOf(point, relativeTo) {
    var dx = point.x - relativeTo.x; // diff on x axis
    var dy = point.y - relativeTo.y; // diff on y axis

    if(dx >= dy) { // point is on top right half from relativeTo
             return dx >= - dy ? 'EAST' : 'NORTH';
    }
    else { // point is on bottom left half from relativeTo
             return dx >= - dy ? 'SOUTH' : 'WEST';
    }
}

РЕДАКТИРОВАТЬ: все это хорошо, если учесть, что начало оси x и y находится в верхнем левом углу области просмотра

...