1

私のアプリには、WinForm 内で XNA 画面を表示するために使用されるカスタム パネルがあります。現在、テストモデルを問題なく表示しており、現在カメラの動きに取り組んでいます。私のカメラはフリー カメラ (特定のターゲットを見ることに縛られていません) ですが、マウスが独自の軸でカメラのヨーとピッチを更新するのに問題がありました。更新方法に何か問題があるのではないかと思いましたが、カメラの更新は を使用して前後に移動するため、そうではありませんでしたKeyboardState。しかし、なぜ機能しないのかについてはわかりMouseStateません。

FreeCamera.cs

using XNAButtonState = Microsoft.Xna.Framework.Input.ButtonState;
....
MouseState pastMouseState;
private float rotationSpeed_ = 1f / 60f;
private float yaw_, pitch_;
...

private void updateMatrix()
    {

        Matrix rotationMatrix = Matrix.CreateRotationX(pitch_) *
                                Matrix.CreateRotationY(yaw_);

        Vector3 forward = new Vector3(0, 0, 1);
        forward = Vector3.Transform(forward, rotationMatrix);

        viewMatrix_ = Matrix.CreateLookAt(Position, Position + forward, Up);
        projectionMatrix_ = Matrix.CreatePerspectiveFieldOfView(
            MathHelper.PiOver4, 16.0f / 9.0f, 0.1f, 100000.0f);
    }

 private void cameraInput()
    {
        KeyboardState keyboardState = Keyboard.GetState(); <-- updates
        currentMouseState = Mouse.GetState();              <-- not updating

        if (currentMouse.LeftButton == XNAButtonState.Pressed)         
            pitch_ -= rotationSpeed_;

        if (keyboardState.IsKeyDown(Keys.W))
            move(1);
        if (keyboardState.IsKeyDown(Keys.S))
            move(-1);

        pastMouseState = currentMouseState;
     }


public void update()
    {
        cameraInput();
        updateMatrix();
4

1 に答える 1

1

(WinForm イベントではなく) XNA のマウス API を使用するには、適切に設定Mouse.WindowHandleする必要があります( MSDN )。

公式の サンプルを使用している場合は、これを のコンストラクターに入れるMainFormとうまくいきます。

Mouse.WindowHandle = this.Handle;

(もちろんusing Microsoft.Xna.Framework.Input;)

于 2013-08-22T13:26:25.133 に答える