0

私はSeabase Alphaによる XNA 用のカメラ クラスを使用していますが、うまく機能します。まったく変更する必要はありませんでした。しかし、水平方向に機銃掃射し、同時にヨーイングすると、ロールが変化し、決してロールできないように「ロック」する方法がわかりません。(一人称シューティングゲームと同様に、機銃掃射、推力、およびピッチとヨーの調整のみが可能です。)

クラスを呼び出すための私のコードは次のとおりです。

        if (gamepadState.ThumbSticks.Right.X != 0)
        {
            // Look Around
            camera.Yaw(-gamepadState.ThumbSticks.Right.X);
        }
        if (gamepadState.ThumbSticks.Right.Y != 0)
        {
            // Look Around
            camera.Pitch(-gamepadState.ThumbSticks.Right.Y);
        }
        if (gamepadState.ThumbSticks.Left.X != 0)
        {
            // Move Around
            camera.StrafeHorz(-gamepadState.ThumbSticks.Left.X);
        }
        if (gamepadState.ThumbSticks.Left.Y != 0)
        {
            // Move Around
            camera.Thrust(gamepadState.ThumbSticks.Left.Y);
        }
        if (gamepadState.Buttons.LeftShoulder == ButtonState.Pressed)
        {
            camera.StrafeVert(0.2f);
        }
        if (gamepadState.Buttons.RightShoulder == ButtonState.Pressed)
        {
            camera.StrafeVert(-0.2f);
        }

カメラ クラスの Up ベクトルを と に強制しようとしましVector(0, 0, 1)Vector(0, 1, 0)。Z を 1 に設定すると少しは役に立ちましたが、それでも転がることはできました。

4

1 に答える 1

0

カメラにロールを実装するつもりがない場合は、海底コードを次のように変更することをお勧めします。

public Matrix ViewMatrix
{
    get
    {
        return Matrix.CreateLookAt(Position, Forward+Position, Vector3.Up);//changed the 3rd param from Up toVector3.Up
    }
}

これにより、発生している任意のロールが抑制されます。ただし、ロールも実装できなくなります。

于 2013-02-20T19:10:13.693 に答える