Перемещение спрайта и обработка событий

В данный момент я изучаю библиотеку SFML, но немного теряюсь при перемещении спрайта. Вот мой файл main.cpp:

#include <SFML/Graphics.hpp>

int main()
{
    // Create the main window
    sf::RenderWindow App(sf::VideoMode(800, 600), "SFML window");

    // Load a sprite to display
    sf::Texture Image;
    if (!Image.LoadFromFile("cb.bmp"))
        return EXIT_FAILURE;
    sf::Sprite Sprite(Image);

    // Define the spead of the sprite
    float spriteSpeed = 10.f;

    // Start the game loop
    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.PollEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();
            if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Up))
                Sprite.Move(spriteSpeed * App.GetFrameTime(), 0);
        }

        // Clear screen
        App.Clear();

        // Draw the sprite
        App.Draw(Sprite);

        // Update the window
        App.Display();
    }

    return EXIT_SUCCESS;
}

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


person Community    schedule 24.11.2011    source источник
comment
Если игрок мгновенно следует за мышью, вы должны установить его положение в соответствии с положением мыши и не перемещать его, если нет, вы должны рассчитать направление смещения, умножить его на скорость и использовать функцию перемещения.   -  person felipemaia    schedule 24.11.2011


Ответы (1)


Вы не должны проверять, удерживается ли клавиша в цикле событий.

SFML публикует только одно событие при первом нажатии клавиши, а затем другое событие при отпускании клавиши. В этом случае ваш код только проверяет, удерживается ли клавиша, когда происходит событие (например, перемещение мыши, щелчок или что-то еще).

Перемещение проверки IsKeyPressed из цикла обработки событий, желательно под ним, должно решить проблему.

Заставить спрайт двигаться к вашей мыши — более сложная задача, которая лучше подходит для StackExchange для разработки игр.

person Collin Dauphinee    schedule 24.11.2011