Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

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

Дело заключается в том что при вождении курсора в окне 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. второй код не мой.


Ответ

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

Комментариев нет:

Отправить комментарий