2015-11-18 4 views
3

Как установить минимальный угол столкновения для объекта SKSpriteNode, так что когда он сталкивается с любым другим спрайтом, его обратный угол всегда больше или равен этому углу - либо отрицательный, либо положительный -?Как установить минимальный угол столкновения для SKSpriteNode

Целью является предотвращение столкновения тупика между двумя параллельными краями - например, так, чтобы шар не колебался между ними навсегда.

+0

Одно временное решение, которое я нашел, проверяя скорость спрайта, когда он сталкивается, и если она меньше минимального значения, применить импульс на спрайт с большими значениями, чтобы избежать взаимоблокировки. Я также попытался установить dx и dy скорости, но это изменило значение скорости спрайта, чего я не хотел. –

ответ

2

Наконец-то я нашел решение - может быть, не самое лучшее, но он отлично работает.

Когда спрайты сталкиваются с другой, я найти угол скорости спрайтов из уравнения:

угла = Atan (д/дй)

и проверить значение угла. Если оно меньше, чем мин один, я установить угол к значению мин, а затем найти новую скорость ду из уравнения:

dy_new = дх * тангенс (new_angle)

и найти dx_new из уравнения:

dx_new = sqrt (pow (dx, 2) + pow (dy, 2) - pow (dx_new, 2));

Это означает, что величина скорости одинакова, но изменяется только направление. Это основано на уравнениях векторов:

скорость = sqrt (pow (dx, 2) + pow (dy, 2)); и
angle = atan (dy/dx);

Вот ссылка векторов скоростей математики: http://faculty.wwu.edu/vawter/PhysicsNet/Topics/Vectors/TheVelocityVector.html

Смежные вопросы