SFML 3D MouseLook - PullRequest
       29

SFML 3D MouseLook

2 голосов
/ 23 июля 2011

Edit2: я понял большую часть проблемы, но у меня есть одно раздражение.Когда курсор достигает края экрана и перемещается на другую сторону, камера дергается, что не работает.Кто-нибудь может увидеть, как это можно остановить?

    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;

    }

Ответы [ 2 ]

1 голос
/ 25 декабря 2012

Обычно вы устанавливаете положение мыши в центре окна в каждом кадре.Ранее вы читали положение мыши и вычитали центр окна.Таким образом, вы можете легко перемещать мышью каждый кадр, не беспокоясь о границах окна.

Vector2i center(window->getSize().x / 2, window->getSize().y / 2);
Vector2i delta = Mouse::getPosition(*window) - center;
Mouse::setPosition(center, *window);
0 голосов
/ 24 июля 2011

Я все еще встаю, чтобы ускорить себя, поэтому, пожалуйста, возьмите это с крошкой соли. (Я пытаюсь!)

Я думаю, что ваше движение мыши измеряется в пикселях, и это приводит к полному обороту камеры. Делив на 0,4 (MOUSE_MOVEMENT,), вы влияете на кратное число «0,4 полных оборота» (например, 152 пикселя / 0,04 = 380 оборотов, оставляя вас в том же направлении, в котором вы начали.)

Попробуйте разделить на 256 вместо 0,4 и посмотрите, будет ли это лучше.

...