Пересечение / столкновение двух прямоугольников в SDL2

#c #collision-detection #sdl-2

#c #обнаружение столкновений #sdl-2

Вопрос:

Это очевидно SDL_IntersectRect(rect1, rect2, result) , но это работает не так, как предполагалось. Если у меня есть прямоугольник, с которым я хочу проверить, не сталкивается ли другой прямоугольник, скажем, этот прямоугольник {100,100,100,100} и мой другой прямоугольник {150, 50, 100, 100} , это не возвращает true . Это работает, если мой прямоугольник {50,150,100,100} . (в основном это означает, что прямоугольник, выделяющий другой слева, работает, но прямоугольник справа, выделяющий прямоугольник слева, не работает). Это известная проблема или я делаю что-то не так? Я просто настроил фиктивный SDL_Rect объект, который является пересечением, но я использую только возврат функции. Есть ли какие-либо альтернативы?

Редактировать: кажется, что это работает только тогда, когда начальная позиция моего прямоугольника находится ВЫШЕ и СЛЕВА от прямоугольника, который я пытаюсь определить, выделяет ли он

Комментарии:

1. Не уверен, почему SDL_IntersectRect не работает должным образом, в качестве альтернативы вы можете определенно рассчитать пересечение самостоятельно

2. Также есть SDL_HasIntersection , если вы только хотите знать, пересекаются ли они друг с другом. Однако я бы предположил, что он должен вести себя аналогично SDL_IntersectRect

3. Я сомневаюсь, что с SDL что-то не так. Возможно, ошибка кроется где-то в другом месте, вам следует опубликовать минимальный пример того, как вы вычисляете пересечение.

4. Обнаружена ошибка, у меня была отрицательная ширина при изменении координат x. прямоугольник рисовал, но SDL_RenderFillRect обрабатывал отрицательную ширину и рисовал ее влево. : ^). Fixed it by changing the initial X coordinate and using a positive width amp; height)