XNA围绕轴心点旋转多个对象

时间:2013-10-23 03:09:50

标签: c# .net xna

这是我的代码。它起作用了,除了我最初做的时候它远离它开始的地方跳跃,并且它正在旋转它的抽搐和快速翻转......

float rotAmount = 0;
Vector2 pivot = CenterSelection();

if (keyboardState.IsKeyDown(Keys.OemPlus)) rotAmount = 0.01f;
if (keyboardState.IsKeyDown(Keys.OemMinus)) rotAmount = -0.01f;

map.DoForSelected(delegate(GameObject mod)
{
    Vector2 vDif = pivot - mod.position;
    float vDist = (float)Math.Sqrt(Math.Pow(vDif.X, 2) + Math.Pow(vDif.Y, 2));
    float vRot = rotAmount + (float)Math.Atan2(vDif.Y, vDif.X);
    mod.position = pivot + new Vector2(
        (float)Math.Cos(vRot),
        (float)Math.Sin(vRot)
        ) * vDist;
    mod.rotation += rotAmount;
});

我想弄清楚什么是错的! 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你的差异向量指向错误的方向:

Vector2 vDif = pivot - mod.position;

这是从positionpivot的矢量。

然后你分配

mod.position = pivot + newDif;

期望newDif是从pivotposition的向量。但它实际上已经逆转了。

所以只需改变你的差异向量:

Vector2 vDif = mod.position - pivot;