2015-08-03 5 views
0

Я в настоящее время с помощью этого столкновения код:Rectangle столкновения (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 + ч, а другая проходит горизонтально от TX к tex и по вертикали от ty до tey? С ш, ч, тексТХ и Тейти все положительны?

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

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 
) 

(две версии эквивалентны, из-за одного из De Morgan's laws.)

 Смежные вопросы

  • Нет связанных вопросов^_^