2014-12-07 6 views
1

Привет, Я хотел бы знать, как создать столкновение с кругом, которое также действует как датчик. Например, когда игрок входит в радиус круга врага, противник начнет преследовать игрока. Основываясь на том, что я пробовал, я использую только поле для столкновений, которое является RECT SpriteRect. Но это не будет достаточно точным для круга. Я думал об использовании вектора, используя D3DXVECTOR2, но я не очень хорош в трансформации. Пожалуйста, помогите мне в том, как я могу это достичь. enter image description hereКак создать обнаружение столкновений вокруг круга? C++

+2

Мне нравится ваш рисунок :) – Quest

+0

@Quest Hahaha это просто концепция. Не делать реальной игры. Только учится. Я делал это раньше, используя stencyl. Супер легкий, так как все это было перетаскивание. Так что теперь я стараюсь изо всех сил усвоить C++, насколько смогу :) Проверьте это, если хотите: [Lost Dungeon] (http://www.kongregate.com/games/yawnm3/lost-dungeon) – Student

ответ

6

Является точкой (xa, ya) в пределах круга в точке (xc, yc) с радиусом r?

запомнить pythagoras? - Он определяет расстояние между двумя точками, и все, что вам нужно, чтобы определить, находится ли что-то внутри круга с заданным радиусом, заключается в том, чтобы определить, меньше ли расстояние до центра круга:

bool IsPointInCircle(float xa, float ya, float xc, float yc, float r) 
{ 
    return ((xa-xc)*(xa-xc) + (ya-yc)*(ya-yc)) < r*r; 
} 

Столкновение между двумя кругами так же просто, вы просто даете 'r' как сумму радиуса двух ваших кругов. Безусловно, это будет расстояние между двумя центрами, когда круги касаются.

Для обнаружения столкновения между квадратами и кругами необходимо рассчитать расстояние от линии к точке. Круги - это самые простые формы для обнаружения столкновения.

+0

Для 3dim ((xa-xc) (xa-xc) + (ya-yc) (ya-yc) + (za-zc) (za-zc)) Quest

+0

@Quest, вы так близко, как можете: вот для сфер в 3d. ((xa-xc) (xa-xc) + (ya-yc) (ya-yc) + (za-zc) (za-zc)) Zuu