2013-10-23 75 views
0

這是我的代碼。它的工作原理,除了當我在做它首先,它跳遠離它啓動,因爲它的旋轉它的抽搐和排序迅速翻轉的...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; 
}); 

我試圖找出什麼是錯的! 非常感謝您的幫助!在錯誤的方向

回答

0

你差向量點:

Vector2 vDif = pivot - mod.position; 

這是positionpivot的向量。

然後分配

mod.position = pivot + newDif; 

期待的是newDifpivotposition的向量。但它實際上是顛倒過來的。

所以才扭轉你差向量:

Vector2 vDif = mod.position - pivot;