0

これが私のコードです。それは機能しますが、最初にそれを行うときを除いて、開始した場所から遠くにジャンプし、ぴくぴくと回転しながら急速に反転します...

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

私は何が間違っているのか理解しようとしています!あなたの助けは大歓迎です!

4

1 に答える 1

0

あなたの差分ベクトルは間違った方向を指しています:

Vector2 vDif = pivot - mod.position;

positionこれは からまでのベクトルpivotです。

次に、割り当てます

mod.position = pivot + newDif;

からへnewDifのベクトルであることを期待しています。でも実際は逆です。pivotposition

したがって、差分ベクトルを逆にするだけです。

Vector2 vDif = mod.position - pivot;
于 2013-10-24T15:33:11.777 に答える