CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

SDL_Delay sous directx ?

[Fenx]
[Fenx]
Niveau 3
30 septembre 2006 à 18:50:31

Bonjour

Je voudrais connaitre l´équivalent de la fonction SDL_Delay() sous directx.

Merci d´avance

dnob700
dnob700
Niveau 10
30 septembre 2006 à 22:08:13

sleep (ou peut-être Sleep) qui prend un argument en milliseconde (contrairement à la fonction posix qui elle prend un argument en seconde (et usleep en milliseconde (ou moins ?) ) et qui se trouve dans windows.h (il y a peut-être une autre fonction, spécifique à directX).

[Fenx]
[Fenx]
Niveau 3
01 octobre 2006 à 00:05:32

Ok merci j´utilise cette fonction.
Par contre j´ai deux problème pour imposer les FPS :

tempsActuel=timeGetTime();
if((tempsActuel-tempsPrecedent)>20)
{
tempsEcoule=tempsActuel-tempsPrecedent;
tempsPrecedent=tempsActuel;
FPS=1000/tempsEcoule;
}
else
Sleep(20 - (tempsActuel -tempsPrecedent));

Avec ce code en faisant un calcul tout bête (1000/20) je devrais avoir 50 en FPS, mais j´ai à peine 30.
De plus ce chiffre n´est pas stable il varie continuellement entre 29 et 30 je crois, ce qui rend difficile la lecture du nombre.
Comment le rendre vraiment stable ?

gokusnake
gokusnake
Niveau 7
01 octobre 2006 à 12:10:42

Ben, déjà, ton FPS n´atteindra jamais 50 étant donné que lorsque ton temps écoulé est égale à 20, il ne rentre pas dans le if, et dans le else, ça te fera Sleep(20-20), ce qui ne sert pas à grand chose. Donc au minimum, temps écoulé dans le if sera egal à 21, ce qu´il te fais un maximum de 47 FPS.

Ensuite, si temps écoulé vaut 33, FPS = 30
si temps écoulé vaut 34, FPS = 29
Donc tu as ta réponse, le temps entre chaque frame oscille entre 33 et 34 ms.

Tout ce que ton code fait, c´est qu´il demande d´afficher chaque frame au minimum toute les 21 ms.

Pour augmenter ton FPS, optimise ton code.

Et pour le rendre parfaitement stable, je ne pense pas que cela soit possible.

[Fenx]
[Fenx]
Niveau 3
01 octobre 2006 à 13:08:16

Ah ok merci pour la réponse.
Maintenant je comprend le principe.

Encore une petite question :
Avec un code comme ça est-ce que mon jeu est censé aller à la même vitesse sur tous les PC ?

gokusnake
gokusnake
Niveau 7
01 octobre 2006 à 17:27:47

Non, mais avec ton code, tu peux déjà être sûr que peut importe le PC, ton FPS ne dépassera pas un certain seuil (dans ton cas, 47). Par contre, il pourra diminuer si le PC à du mal à suivre.

Sinon, pour augmenter ton FPS, il suffit de diminuer ta valeur dans le if (ton 20).

Pour essayer d´avoir quelquechose d´assez stable, je te conseille de faire ceci:

Imaginons que tu fasse un jeu de voiture, celle ci va à une certaine vitesse que tu as calculé comme tu veux. Et bien, pour avoir une vitesse juste, tu inclus le temps écoulé dans son calcul.

Ainsi, plus le temps écoulé est long, plus la vitesse sera élevée et inversement.Non, mais avec ton code, tu peux déjà être sûr que peut importe le PC, ton FPS ne dépassera pas un certain seuil (dans ton cas, 47). Par contre, il pourra diminuer si le PC à du mal à suivre.

Sinon, pour augmenter ton FPS, il suffit de diminuer ta valeur dans le if (ton 20).

Pour essayer d´avoir quelquechose d´assez stable, je te conseille de faire ceci:

Imaginons que tu fasse un jeu de voiture, celle ci va à une certaine vitesse que tu as calculé comme tu veux. Et bien, pour avoir une vitesse juste, tu inclus le temps écoulé dans son calcul.

Ainsi, plus le temps écoulé est long, plus la vitesse sera élevée et inversement.

[Fenx]
[Fenx]
Niveau 3
02 octobre 2006 à 22:04:09

Merci beaucoup gokusnake.
J´ai essayé ta technique et sa marceh parfaitement.
On m´en avait déja parlé, mais je n´avais pas compris.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment