Obj1과 Obj2를 호출 할 수있는 두 항목이 있습니다 ... 둘 다 현재 위치 pos1과 pos2를가집니다. 또한 현재 속도 벡터 speed1과 speed2가 있습니다 ... 거리가 가까워지면 어떻게 확인할 수 있습니까? (현재 및 다음 거리 확인), 그들은 서로로부터 멀리 이동할 것입니까?2 xna 스프라이트를 서로 동적으로 이동하는 방법은 무엇입니까?
2 개의 벡터 사이의 부호가있는 각도를 제공하는 부호 첨부 각도 함수가 있습니다.이 함수를 사용하여 서로 다른 스프라이트를 이동하기 위해 속도 1과 속도 2를 얼마나 회전시켜야합니까?
public float signedAngle(Vector2 v1, Vector2 v2)
{
float perpDot = v1.X * v2.Y - v1.Y * v2.X;
return (float)Math.Atan2(perpDot, Vector2.Dot(v1, v2));
}
나는 그런 다음 및 현재 거리를 확인하십시오
float currentDistance = Vector2.Distance(s1.position, s2.position);
Vector2 obj2_nextpos = s2.position + s2.speed + s2.drag;
Vector2 obj1_nextpos = s1.position + s1.speed + s1.drag;
Vector2 s2us = s2.speed;
s2us.Normalize();
Vector2 s1us = s1.speed;
s1us.Normalize();
float nextDistance = Vector2.Distance(obj1_nextpos , obj2_nextpos);
그런 다음 따라
그들은 점점 여부 크거나 나도 같은 방향에서 자신의 현재 속도를 증가시켜 (그들을 멀리 이동할 작은 또는 내가 더 이상 실패 함) ...if (nextDistance < currentDistance)
{
float angle = MathHelper.ToRadians(180)- signedAngle(s1us, s2us);
s1.speed += Vector2.Transform(s1us, Matrix.CreateRotationZ(angle)) * esc;
s2.speed += Vector2.Transform(s2us, Matrix.CreateRotationZ(angle)) * esc;
}
아이디어가 있으십니까?
귀하의 의견을 주셔서 대단히 감사합니다 ..이 공식화해야하고 내 결과를 여기에 회신 해 드리겠습니다 .. 감사 Blau! – JML