Паразитный курсор в SFML

196
14 ноября 2018, 11:40

Дело заключается в том что при вождении курсора в окне sfml при нажатии клавиши движения, персонаж движется быстрее и рывками. Соответственно как координаты курсора не меняются или вообще курсор находится за пределами окна все идет без рывков. При этом в соседнем проекте практический все тоже самое и работает отлично, единственное отличие в коде это динамическое создание окна и обращение к нему через указатель.

void System::CreateWindow(int Width, int Height, string Title)
{
    window.create(VideoMode(Width,Height), Title);
    window.setVerticalSyncEnabled(true);
    window.setFramerateLimit(iFrameLimit);
}
void System::MainLoop(StateBase& state)
{
    while(window.isOpen())
    {
        Clock();
        HandleEvents(event);
        Update(fTime);
        Render(window);
    }
}
void System::HandleEvents(Event event)
{
    while (window.pollEvent(event))
    {
        if (event.type == event.Closed) window.close();
        states.back()->HandleEvents(this);
    }
}
void System::Clock()
{
    fTime = clock.getElapsedTime().asMicroseconds();
    clock.restart();
    fTime /= fGameSpeed;
    if (fTime > fGameTick )
        fTime = fGameTick;
}

Соседний проект:

void CGameEngine::mainLoop()
{
    while (window->isOpen())
    {
        //TimeWorks
        float time = (float)clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time = time / 800;
        //Event processor
        sf::Event event;
        while (window->pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window->close();
        }
CGameEngine::CGameEngine()
{
    gameName = "HellFinger";
    playerTileMap = "sprite.png";
    mapTileMap = "map.png";
    loadConfig(7);
    window = new sf::RenderWindow(sf::VideoMode(screenResolution.x, screenResolution.y), gameName);
    camera = new CameraView(0, 0, screenResolution.x, screenResolution.y);
    player = new Entity(playerTileMap, PLOTM.left, PLOTM.top, PLOTM.width, PLOTM.height);
    mapImage.loadFromFile("Resources/Images/" + mapTileMap);
    mapTexture.loadFromImage(mapImage);
    mapSprite.setTexture(mapTexture);
}

P.S. второй код не мой.

Answer 1

Решением проблемы являлся вынос update'ов за цикл pollEvent, ибо перемещения курсора в окне добавляет итераций цикла что и повлекло за собой проблему.

READ ALSO
C++ Windows API WebKit

C++ Windows API WebKit

Как собрать C++ Windows API Desktop приложение с WebKit? Видел WebKitNET но интересует чисто C++

151
Частичная расшифровка файла

Частичная расшифровка файла

Есть файлы, зашифрованные с помощью библиотеки Crypto++, алгоритм CBC

176
Ограничить величину int c++?

Ограничить величину int c++?

Например есть

167
Приложение виснет при больших данных

Приложение виснет при больших данных

Да, допускаю, что сформулировал заголовок глупоДело вот в чём, есть приложение, часть которого занимается поиском директорий и определённых...

167