Я только что начал с программирования Win32 GUI, несколько дней назад. Я пытаюсь сделать простую игру, в которой мне нужно обнаружить столкновение между двумя объектами. Так что я сделал мои символы используя RECT
-структуруvisual C++ RECT collision
Для того, чтобы обнаружить, если они сталкиваются я использовал:
// Returns 1 if the point (x, y) lies within the rectangle, 0 otherwise
int is_point_in_rectangle(RECT r, int x, int y) {
if ((r.left <= x && r.right >= x) &&
(r.bottom <= y && r.top >= y))
return 1;
return 0;
}
// Returns 1 if the rectangles overlap, 0 otherwise
int do_rectangles_intersect(RECT a, RECT b) {
if (is_point_in_rectangle(a, b.left , b.top ) ||
is_point_in_rectangle(a, b.right, b.top ) ||
is_point_in_rectangle(a, b.left , b.bottom) ||
is_point_in_rectangle(a, b.right, b.bottom))
return 1;
if (is_point_in_rectangle(b, a.left , a.top ) ||
is_point_in_rectangle(b, a.right, a.top ) ||
is_point_in_rectangle(b, a.left , a.bottom) ||
is_point_in_rectangle(b, a.right, a.bottom))
return 1;
return 0;
}
который я нашел на вопрос здесь, и это, кажется, работает в ситуациях, как this. Но есть небольшая проблема с этой ситуацией here
Есть ли способ исправить это? Я делаю это неправильно? Должен ли я попробовать другой подход? Любой совет поможет.
Спасибо я в конечном итоге добавив это в конце функции, которую я первоначально использовал, и, похоже, выполняет эту работу. –
Этот код выполняет всю проверку, и он может ** полностью заменить ** эту функцию. Попытайтесь провести некоторое время с бумагой и карандашом, чтобы понять, почему этого достаточно для всех возможных случаев. – 6502
Я просто протестировал его, и он, похоже, не работает в этом случае. Http://puu.sh/2lrXw –