#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)