Столкновение с прямоугольником (C ++)

В настоящее время я использую этот код столкновения:

( // tx = other x, tex = other end x etc.
( // horizontal collision
(xpos >= tx && xpos <= tex)
||
((xpos + w) <= tex && (xpos + w) >= tx)
)
&&
( // vertical collision
(ypos >= ty && ypos <= tey)
||
((ypos + h) <= tey && (ypos + h) >= ty)
)
)

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

0

Решение

Правильно ли я понимаю, что один прямоугольник идет горизонтально от XPOS в XPOS + вес и вертикально от YPos в YPos + час, а другой простирается горизонтально от Техас в текс и вертикально от ти в Тей? С вес, час, тексТехас, а также Тейти все быть позитивным?

Если так, то вы можете написать:

xpos <= tex && xpos + w >= tx       // horizontal collision
&& ypos <= tey && ypos + h >= ty    // vertical collision

Кроме того, вам может быть проще рассуждать, если вы рассчитываете условия, при которых они не столкнуться, и просто добавить !:

!(
xpos > tex             // first rectangle entirely to right of second
|| xpos + w < tx       // first rectangle entirely to left of second
|| ypos > tey          // first rectangle entirely above second
|| ypos + h < ty       // first rectangle entirely below second
)

(Две версии эквивалентны, из-за одного из Законы де Моргана.)

0

Другие решения


По вопросам рекламы [email protected]