IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

[DIRECTX 9.0 - Delphi] Timer irregulie


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 50
    Par défaut [DIRECTX 9.0 - Delphi] Timer irregulie
    Bonjour,
    Je entrain de voir pou realiser un timer en directx en me basant sur le environnement.get_tickcount.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     if Environment.get_TickCount mod 1000 = 0 then
     // on recupere le temps en milliseconde//
     
      begin
        tmptime := tmptime - 1 ;
        if tmptime = 0 then
        begin
          tmptime := 59;
          min := min - 1;
        end;
      end;
    enfin la gestion du compteur marche, mais j ai des irregularites sur l incrementation et quand je fais tourner le programme sur une autre machine ca ne marche quasiment plus, la decrementation se fait par deux ne se fait plus etc ...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    'Alut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Environment.get_TickCount mod 1000 = 0 then
    Tu ne sais pas à quel moment ton processeur va réaliser ce test. Il est donc possible que get_tickCount mod 1000 ne sois pas égale à zero de manière régulière.

    Pour un timer:
    Tu dois créer une variable qui va représenter ton temps. Tu vas incrémenter cette variable en fonction du temps écoulé entre chaque test.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 50
    Par défaut
    ok j'ai capte, si ca interesse des gens voici ce que j ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    procedure timer.my_time;
    begin
     
     
      if Environment.get_TickCount div 1000 > old_tickcount then
      begin
         old_tickcount := Environment.get_TickCount div 1000;
        tmptime := tmptime - 1 ;
        if tmptime = 0 then
        begin
          tmptime := 59;
          min := min - 1;
        end;
      end;
    end;
    merci pour ta reponse

  4. #4
    Invité
    Invité(e)
    Par défaut
    Et tu veux pas faire un truc simple de ce genre là plutôt ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if  (old_tickcount - Environment.get_TickCount) >= 1000 then
    begin
             (* utilisation du timer *)
    end;
    old_tickcount := Environment.get_TickCount;
    Après tu fqit ce que tu veux dedans... (pour compter les minutes, tu as plus simple tout de même...)

    edit : ou alors si tu veux faire un truc toutes les N secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    newTime := Environment.get_TickCount();
    deltaTime := newTime - currentTime;
    currentTime := newTime;
     
    accumulator := accumulator + deltaTime;
     
    while (accumulator>=dt) do
    begin
     
             (* operations *)
     
             inc(t, dt);
             dec(accumulator, dt);
    end;

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 50
    Par défaut
    Je trouve ma methode un peu plus "simple" que la tienne en ce qui concerne la comprehension et meme au niveau du code en lui meme... maintenant ce que vaut la complexite de mon algo par rapport au tiens je ne sais pas

Discussions similaires

  1. [Delphi] et directx
    Par ffomnislash dans le forum DirectX
    Réponses: 1
    Dernier message: 02/11/2005, 11h41
  2. [DirectX] DelphiX, ou une autre adaptation pour Delphi
    Par Nicodemus dans le forum Langage
    Réponses: 1
    Dernier message: 06/10/2005, 14h07
  3. [Delphi et DirectX] Tableau de vertices
    Par El-ToniO dans le forum DirectX
    Réponses: 9
    Dernier message: 07/05/2005, 14h19
  4. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47
  5. cours directx francais sur delphi
    Par charly dans le forum DirectX
    Réponses: 2
    Dernier message: 28/05/2002, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo