2

Edit2:私は問題のほとんどを理解しましたが、私が持っている1つの厄介な問題があります。カーソルが画面の端に達して反対側に引っ張られると、カメラがガクガクしますが、これは機能しません。誰かがそれを止める方法を見ることができますか?

    bool attention = true;
    Vector2 p, mousePos;
    private float MOUSE_SENSITIVITY = 4.0f;

    private void OnMouseMove(object sender, MouseMoveEventArgs e)
    {
        float DeltX = 0, DeltY = 0;
        int border = 2;
        Console.WriteLine(attention + "");

        if (attention == true)
        {
            p.X = e.X;
            p.Y = e.Y;

            DeltX = (float)(mousePos.X - e.X) / MOUSE_SENSITIVITY;
            DeltY = (float)(mousePos.Y - e.Y) / MOUSE_SENSITIVITY;
        }
        else
        {
            mousePos = p;
        }

        attention = true;

        if (e.X > App.Width - border)
        {
            attention = false;
            App.SetCursorPosition((uint)border, (uint)e.Y);
            DeltX = 0;
            DeltY = 0;

        }
        else if (e.X < border)
        {
            attention = false;
            App.SetCursorPosition((uint)(App.Width - border), (uint)e.Y);
            DeltX = 0;
            DeltY = 0;

        }

        if (e.Y > App.Height - border)
        {
            attention = false;
            App.SetCursorPosition((uint)e.X, (uint)border);
            DeltX = 0;
            DeltY = 0;

        }
        else if (e.Y < border)
        {
            attention = false;
            App.SetCursorPosition((uint)e.X, (uint)(App.Height - border));
            DeltX = 0;
            DeltY = 0;

        }



        Cam.RotateY(DeltX);
        Cam.RotateX(DeltY);


        mousePos = p;

    }
4

2 に答える 2

1

通常、各フレームでマウスの位置をウィンドウの中央に設定します。以前は、マウスの位置を読み取り、ウィンドウの中心を差し引いていました。このようにして、ウィンドウの境界を気にすることなく、フレームごとにマウスの動きを簡単に取得できます。

Vector2i center(window->getSize().x / 2, window->getSize().y / 2);
Vector2i delta = Mouse::getPosition(*window) - center;
Mouse::setPosition(center, *window);
于 2012-12-25T13:27:04.930 に答える
0

私はまだ自分自身をスピードアップしているので、これを一粒の塩で受け取ってください. (私はしようとしています!)

マウスの動きはピクセル単位で測定され、これはカメラの完全な回転に変換されると思います。0.4 で割ると (MOUSE_MOVEMENT)、「0.4 完全な回転」の倍数に影響します (例: 152 ピクセル / .04 = 380 回転、開始時と同じ方向を向いたままになります)。

0.4 ではなく 256 で割ってみて、うまくいくかどうかを確認してください。

于 2011-07-23T23:33:49.413 に答える