Elapsedmilliseconds ...

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Elapsedmilliseconds ...

Message par jerexgrz »

Serait il possible de rendre plus precis cette fonction ? (de l'ordre de la millisecond pres ?)

Code : Tout sélectionner

InitKeyboard()
InitSprite()
OpenScreen(320,200,16,"")

delai.l = 250  ; 250 millisecondes ?
x.l : y.l = 10

timer1= ElapsedMilliseconds()
timer3= ElapsedMilliseconds()
Repeat

timer2= ElapsedMilliseconds()

ExamineKeyboard()

If delai = timer2-timer1
    
    If x < 300 
        x=x+1
    ElseIf x >= 300
        x=10
      y = y +10 
    EndIf
    
    For t= 1 To 10
        StartDrawing(ScreenOutput())
          Plot(10+x,y,RGB(128,0,128))      
        StopDrawing()
    Next t 
   
    timer4 = ElapsedMilliseconds() - timer3
    Debug timer4
   
    timer1 = timer2    
EndIf 

FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
C'est un petit test sympa ! facile à utiliser et à comprendre ! :D
apparement le code d'une boucle pb (repeat, ...) est relue toutes les 15 ms ! Si c'est juste ce que je dit, est il possible de relire cette boucle toutes les 10 ms au lieu de 15ms???
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Un début d'aide avec un timer plus précis:
http://www.purebasic.fr/english/viewtopic.php?t=13410
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

C'es un peu utopique d'espérer que ton programme tombe pile sur le "If" toutes les 250 millisecondes... en général on fait plutôt son test comme ca:

Code : Tout sélectionner

InitKeyboard()
InitSprite()
OpenScreen(320,200,16,"")

delai.l = 250  ; 250 millisecondes ?
x.l : y.l = 10

timer1= ElapsedMilliseconds()
timer3= ElapsedMilliseconds()
Repeat

timer2= ElapsedMilliseconds()

ExamineKeyboard()

If delai < timer2-timer1
   
    Debug timer2 - timer1
   
    If x < 300
        x=x+1
    ElseIf x >= 300
        x=10
      y = y +10
    EndIf
   
    For t= 1 To 10
        StartDrawing(ScreenOutput())
          Plot(10+x,y,RGB(128,0,128))     
        StopDrawing()
    Next t
   
    timer4 = ElapsedMilliseconds() - timer3
    Debug timer4
    Debug "---"
   
    timer1 = timer2   
EndIf

FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Dri
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Message par jerexgrz »

*Dry : tu as tout à fait raison: j'avais modifié un petit peu le code :

Code : Tout sélectionner

InitKeyboard() : InitSprite()

OpenScreen(320,200,16,"")

delai.l = 250  ; 250 ms seconde ?
x.l = 10
y.l = 10

timer1= ElapsedMilliseconds()
timer3= ElapsedMilliseconds()

p10.l
tps.l

Repeat
ExamineKeyboard()

tps = timer2 - timer1
timer2=  ElapsedMilliseconds()
p10 = (tps * 10) /100
;Debug tps

If delai >= tps - p10 And delai <= tps + p10
    
    If x < 300 
        x=x+1
    ElseIf x >= 300
        x=10
      y = y +10 
    EndIf
    
    For t= 1 To 10
        StartDrawing(ScreenOutput())
          Plot(10+x,y,RGB(128,0,128))      
        StopDrawing()
    Next t 
   
    timer4 = ElapsedMilliseconds() - timer3  
    timer1 = timer2    
EndIf 

FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
J'avais ajouter une marge d'erreur de 10% (au cas ou!). Par contre, il faut plusieurs fois executer le prog pour qu'il marche des fois. (je me demande si j'ai pas un prob avec mon ordi!).
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Message par jerexgrz »

Ca y est ! Pour un fonctionnement optimal, il faut mettre Elapsedmilliseconds avant examinekeyboard(). Heureusement, qu'il y a de l'aide sur le forum, jamais je n'y aurais penser. Il n'y a pas d'indications dans l'aide !
Répondre