Petla stałokrokowa - kłopot z wyswietlaniem

0

Witam

Napisałem aplikacje w której implementuje pętle stało krokową
Jednak użycie tej pętli powoduje wyświetlanie się zawartości okna w sposób błędny.
Oto skrócony kod który ukazuje problem.

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

#include <iostream>


int main()
{
    sf::RenderWindow window(sf::VideoMode(640,480), "SFML works!");

    sf::Time timeLastUpdate = sf::Time::Zero;
    sf::Clock gameClock;
    const sf::Time stepTime = sf::seconds(1/60);

    ///Zombie code - don't touch
    ///const uint64_t UPDATES_PER_SECOND = 33;
    ///const uint64_t MILLISECONDS_PER_UPDATE = 1000/UPDATES_PER_SECOND;
    while (window.isOpen())
    {
        sf::Time time = gameClock.restart();
        timeLastUpdate += time;
        while(timeLastUpdate > stepTime)
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)window.close();
            }
            timeLastUpdate -= stepTime;
            //update(stepTime);
        }
        window.clear();
       /////Drawing...
        window.display();
    }

    return 0;
}

zrzut.png

Zamiast tego co rysuje aplikacja na oknie widoczne jest to co było pod oknem w momencie jego tworzenia - tutaj CodeBlocks i terminal
Problem spowodowany jest tym że moja stało krokowa pętla nie pozwala na wykonanie

         window.display(); 

Możecie mi wskazać błąd w mojej pętli który to powoduje ?.
Używam GNU/Linux 18 Cinnamon, Codeblocks 16.01 ,SFML i GCC

2

Trzeba po prostu odpalić debugger i przelecieć parę razy po pętli, błąd najpewnie leży w błędnych założeniach a nie samym kodzie.

0

Naprawione - pętla działa dobrze.
Nie wiem dlaczego ale pomogła zamiana

    const sf::Time stepTime = sf::seconds(1/60);

na

    const sf::Time stepTime = sf::seconds(1.f/60.f);
3

@kacper546 myślę, że to rozwieje wątpliwości:

#include <iostream>

int main() {
	std::cout << "1/60: " << 1 / 60 << "\n";
	std::cout << "1.f/60.f: " << 1.f / 60.f << "\n";
	return 0;
}

Wyjście programu:

1/60: 0
1.f/60.f: 0.0166667

1 użytkowników online, w tym zalogowanych: 0, gości: 1