Дело заключается в том что при вождении курсора в окне 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, ибо перемещения курсора в окне добавляет итераций цикла что и повлекло за собой проблему.
Комментариев нет:
Отправить комментарий