Привет, я хотел бы знать, как создать столкновение окружности, которое также действует как датчик. Например, когда игрок вводит радиус круга врага, враг начинает преследовать игрока.
Исходя из того, что я пробовал, я использую только поле столкновения, которое является RECT SpriteRect
, Но это не будет достаточно точным для круга. Я думал об использовании вектора с помощью D3DXVECTOR2
но я не силен в трансформации. Пожалуйста, помогите мне, как я могу достичь этого ..
Находится ли точка (xa, ya) внутри круга в точке (xc, yc) с радиусом r?
Помнишь Пифагора? — Он определяет расстояние между двумя точками, и все, что вам нужно, чтобы определить, находится ли что-то внутри круга с данным радиусом, — это определить, меньше ли расстояние до центра круга, чем радиус:
bool IsPointInCircle(float xa, float ya, float xc, float yc, float r)
{
return ((xa-xc)*(xa-xc) + (ya-yc)*(ya-yc)) < r*r;
}
Обнаружение столкновений между двумя кругами так же просто, вы просто даете ‘r’ как сумму радиуса двух ваших кругов. Потому что это будет расстояние между двумя центрами, когда круги касаются.
Чтобы обнаружить столкновение между квадратами и кругами, вам нужно рассчитать расстояние от линии до точки. Круги — в значительной степени самые простые формы для обнаружения столкновений.