我有两个项目,我们可以称它们为Obj1和Obj2 ...两者都有当前位置pos1和pos2 ..此外,它们具有当前速度矢量speed1和speed2 ...如何确保它们的距离越来越近(检查当前和下一个距离),他们会离彼此更远吗?如何动态地将2个xna图片从彼此移开?
我有一个带符号的角度函数,它给了我两个向量之间的符号角度。我该如何利用它来检查我应该旋转多少速度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