2016-12-22 1 views
0

J'ai créé un jeu simple avec SFML et Box2d. Mais j'ai un problème. Le temps de la physique dépend du framerate du joueur.box2d - calculer la même heure pour chaque montant FPS

J'ai déjà obtenu le FPS du lecteur, mais je ne suis pas vraiment sûr de savoir comment obtenir le même temps. J'ai également trouvé aucune formule ... Quelqu'un peut-il m'aider?

while (window.isOpen()) { 

    sf::Event event; 
    while (window.pollEvent(event)) { 
     if (event.type == sf::Event::Closed) 
      window.close(); 
    } 

    window.clear(); 


    window.display(); 

    sf::Time time = clock.getElapsedTime(); 
    float fps = 1.0f/time.asSeconds(); 
    std::cout << 1.0f/time.asSeconds() << std::endl; 
    world.getBWorld()->Step(60/1, 8, 3); 
    clock.restart(); 
} 

Répondre

0

Vous devez utiliser un temps delta.

Dans la programmation graphique, le temps delta terme est généralement utilisé pour la mise à jour des paysages variablement en fonction du temps écoulé depuis la dernière mise à jour jeu. Wikipedia

sf::Clock deltaClock; 
while (window.isOpen()) { 
{ 
    // ... 
    sf::Time dt = deltaClock.Restart(); // Restart returns the elapsed time 
} 

Ensuite, vous pouvez déplacer votre joueur avec:

mySprite.Move(velocity * dt.AsSeconds());