gpt4 book ai didi

xna - 如何动态地将 2 个 xna Sprite 彼此分开?

转载 作者:行者123 更新时间:2023-12-04 18:41:40 27 4
gpt4 key购买 nike

我有两个项目,让我们称它们为 Obj1 和 Obj2...两者都有当前位置 pos1 和 pos2..此外,它们还有当前速度向量 speed1 和 speed2 ...我如何确保它们的距离越来越大更近(通过检查当前和下一个距离),他们会远离彼此?

我有一个带符号的角度函数,它给出了 2 个向量之间的带符号角度。我如何利用它来检查我应该将 speed1 和 speed2 旋转多少才能使这些 Sprite 相互移动?

    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));
}

我这样检查 NEXT 和 CURRENT 距离:

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;
}

有什么想法吗?

最佳答案

如果对象 A 和 B 越来越近,则对象组件之一(X 或 Y)相反。

在这种情况下,Bx 与 Ax 相反,因此只需将 Ax 添加到对象 B 的速度矢量,并将 Bx 添加到对象 A 的速度矢量

enter image description here

关于xna - 如何动态地将 2 个 xna Sprite 彼此分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com