这是我的代码。它起作用了,除了我最初做的时候它远离它开始的地方跳跃,并且它正在旋转它的抽搐和快速翻转......
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 :(得分:0)
你的差异向量指向错误的方向:
Vector2 vDif = pivot - mod.position;
这是从position
到pivot
的矢量。
然后你分配
mod.position = pivot + newDif;
期望newDif
是从pivot
到position
的向量。但它实际上已经逆转了。
所以只需改变你的差异向量:
Vector2 vDif = mod.position - pivot;