Partage
  • Partager sur Facebook
  • Partager sur Twitter

Saut + gravité avec delta time

Anonyme
    7 août 2021 à 12:11:03

    Bonjour (ou bonsoir :p) ! Jusqu'à maintenant, j'utilisais la V-SYNC pour limiter mes FPS. Mais je suis dis que ça poserait des problèmes d'avoir 90 FPS sur un écran 144 Hz (c'est un exemple). J'ai alors décidé d'enlever la limite. Je me retrouve face à un problème de vitesse de mouvements :euh:. J'ai fait des recherches dans mon coin et j'ai découvert la technique delta time, qui consiste à avoir une vitesse constante et indépendante duframerate en calculant le temps d'une frame.

    Pour calculer le temps d'une frame, je fais comme ça :

    auto lastTime = std::chrono::high_resolution_clock::now();


    ... puis :

    		auto currentTime = std::chrono::high_resolution_clock::now();
    		float delta = std::chrono::duration<float, std::milli>(currentTime - lastTime).count();
    		lastTime = currentTime;


    Et enfin :

    float speed = 0.03f * delta;


    Jusqu'à là, aucun problème. Et puis c'est le saut et la gravité qui me posent des soucis :euh:...

    J'ai alors tapé ceci :

    float jumpForce = delta * 0.02f;

    ... puis :

    if (GetAsyncKeyState(VK_SPACE) && onGround) // onGround pour savoir si le joueur est sur le sol
           velocity.y = jumpForce;
    
           velocity.y -= delta * 0.0001f;


    Et pour une raison que j'ignore, je saute d'une hauteur différente à chaque fois, pourtant, j'ai toujours autant de FPS.

    Une semaine que ça dure... J'ai besoin d'aide, svp :D.

    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2021 à 23:12:21

      Bonjour,

      La vitesse initiale verticale avec laquelle un personnage quitte le sol ne dépend pas du delta. En gros, on ignore la phase d'accélération qui permet le saut, et c'est probablement ce que tu as essayé de modéliser. Mais une fois qu'on a quitté le sol, il n'y a plus que la gravité qui fait varier la vitesse, négativement, et donc seule compte la vitesse initiale verticale, qui est à priori constante dans un jeu.

      PS: De même, la vitesse de déplacement horizontale est une constante, donc ta variable speed est mal nommée. Il devrait y avoir une constante Speed avec une valeur 0.03f (ou une variable si la vitesse peut l'être), et par exemple, une variable "move = Speed * delta".

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        9 août 2021 à 20:53:35

        Ah oui, je comprends mieux, maintenant, merci ;) ! Je crois d'ailleurs avoir trouvé la solution :). Grâce à ce site, j'ai réussi à avoir le résultat que je voulais. J'avais déjà rencontré cette solution sur plusieurs sites, mais à chaque fois, je ne pouvais plus bouger à l'horizontal. En faite, c'était juste une (stupide) erreur dans les calculs de collision :p.
        • Partager sur Facebook
        • Partager sur Twitter

        Saut + gravité avec delta time

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown