У меня есть две функции, которые я буду использовать для проверки коллизий между объектами на экране, поскольку эти функции - это вещи, которые будут выполняться много, я бы хотел, чтобы они работали с максимальной эффективностью и потому что в настоящее время они кажутся довольно грязными, мне было интересно, смогу ли я получить вашу помощь.улучшение при обнаружении столкновений
Мои функции заключаются в следующем: Это функция, которая будет на самом деле называется на объекте:
bool ScreenObject::intersects(ScreenObject & a,ScreenObject & b) {
if(inter(a,b))
return true;
else
return inter(b,a);
}
и это интер:
bool inter(ScreenObject & a,ScreenObject & b) {
if(a->getsx()>b->getsx()) {
if(a->getsx()<b->getSxmax()) {
if(a->getsy()>b->getsy())) {
if(a->getsy<b->getSymax()) {
return true;
}
} else {
if(b->getsy()>a->getsy())) {
if(b->getsy<a->getSymax()) {
return true;
}
}
}
}
}
return false;
}
getsx/getsy возвращает минимальное значение x/y (т.е. нижний левый угол объекта), тогда как getSxmax/getSymax возвращает максимум. Мой вопрос в том, есть ли способ сделать этот код лучше, поскольку в настоящее время это выглядит довольно плохо выполненным.
Какова форма объектов? Например, если один объект является выпуклым, а другой - вогнутым, то только проверка минимума или максимума может возвращать ложные положительные результаты. – kaisernahid
, в этом случае большинство объектов будут прямоугольными, однако будут другие, которые не являются, не могли бы вы объяснить, как проверить это, я думал, что мне придется проверять координаты, которые совпадают с объектами кривая, однако, если есть лучший способ, объясните, пожалуйста, – user2673108
Посмотрите эту тему gamedev.se: http://gamedev.stackexchange.com/questions/586/what-is-the-fastest-way-to-work- out-2d-bounding-box-intersection – rkhayrov