Uvatha
Messages postés34Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention17 mai 2007
-
21 août 2003 à 09:41
Uvatha
Messages postés34Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention17 mai 2007
-
21 août 2003 à 19:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Uvatha
Messages postés34Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention17 mai 2007 21 août 2003 à 19:39
Merci à tous pour vos façons de le faire... ca va m'aider a rendre la source de mon jeu un peu moins bordel!!! la jai pas le temps de tester aucune de vos méthodes mais je vais le faire puisqu'elles ont l'air de marché et qu'elles sont pas mal moins longues.
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 21 août 2003 à 15:56
Salut EBArtSoft !
C'est pas que j'aime pas les commandes internes, mais parfois elles font des choses que l'on n'attend pas d'elle, et puis il est plus facile de déboguer son propre algorithme qu'une commande interne ou qu'un API. Sans racune !
@+
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 21 août 2003 à 15:07
Je remet les \ qui avaient disparus (fait main aussi ... lol) !
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter \ 3600), "00") & ":" & Format((Counter \ 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub
@+
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 21 août 2003 à 15:04
>Neria
C'est vrais tu a raison j'ai mis // a la place des \ ce qui incremente a 30 au lieu de 60 ... (l'erreur est humaine ! lol)
Cela dit lorsque que tu programme qlq chose il vaus mieu avoir confiance au commande interne ou bien dans le cas contraire
change de language de prog... lol
Mais puisque que tu prefere une autre methode en voila une :
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter 3600), "00") & ":" & Format((Counter 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub
@+
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 21 août 2003 à 14:07
Salut !
Evidement quand on choisit de faire confiance aux commandes internes...
Bref j'ai testé ton système ( je n'ai jamais utilisé format ) : PROBLEME !!!
Il incremente les heures quand il est la demi et non quand on arrive à 60 !!!!
Bref mon algo fait main est archaïque mais fiable !!!
@+
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 21 août 2003 à 13:55
Bonjour,
je propose :
(timer1.interval=1000)
Private Sub Timer1_Timer()
Static Counter As Long
Counter = Counter + 1
Caption = Format((Counter / 3600), "00") & ":" & Format((Counter / 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
End Sub
@+
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 21 août 2003 à 10:15
Salut !
J'ai regardé ta source, c'est le bordel !
On peut faire beaucoup mieux avec un seul timer ( 1 sec ) :
Private Sub Timer1_Timer()
'Incrémente les secondes
LblSeconds.Caption = LblSeconds.Caption + 1
'Mise en forme
If LblSeconds.Caption < 10 Then LblSeconds.Caption = "0" & LblSeconds.Caption
'On passe une minute, remise à zero et mise en forme
If LblSeconds.Caption = 60 Then
lblsecondes.Caption = "00"
lsblminutes.Caption = LblMinutes.Caption + 1
If LblMinutes.Caption < 10 Then LblMinutes.Caption = "0" & LblMinutes.Caption
End If
'On passe une heure, remise à zero et mise en forme
If LblMinutes.Caption = 60 Then
LblMinutes.Caption = "00"
LblHeures.Caption = LblHeures.Caption + 1
If LblHeures.Caption < 10 Then LblHeures.Caption = "0" & LblHeures.Caption
End If
'On passe un jour, remise à zero de tout
If LblHeures.Caption = 24 Then
lblsecondes.Caption = "00"
LblMinutes.Caption = "00"
LblHeures.Caption = "00"
End If
End Sub
Mais tu peut aussi mettre trois variables et afficher le tout dans un seul label !
tu noteras qu'il y a des commentaires !!! Même si ça parait facile il est necessaire de mettre des commentaires !!!
@+
PS : Envoie moi une capture de ton jeu !
CAD9757
Messages postés74Date d'inscriptiondimanche 17 août 2003StatutMembreDernière intervention27 mars 2004 21 août 2003 à 09:59
Si tu veux faire un truc précis, fuis les timers comme la peste !
Sers toi de la fonction API gettickcount() (précis à la milliseconde) puis convertis la diiférence entre le temps actuel et le temps de réf en hh:mm:ss. Pour les 0 devant : instruction format
Uvatha
Messages postés34Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention17 mai 2007 21 août 2003 à 09:41
Je vais ajouter la date en plus demain... la jmen vais mcoucher.. :P
Dites-moi ce que vous en pensez... et si il y a une facon plus vite, jaimerais le savoir pcq cé chian de faire ces copiers collers pour pas ke vb mette les 9 premiers chiffres tu seul, pour kil mette un 0 avant...
21 août 2003 à 19:39
21 août 2003 à 15:56
C'est pas que j'aime pas les commandes internes, mais parfois elles font des choses que l'on n'attend pas d'elle, et puis il est plus facile de déboguer son propre algorithme qu'une commande interne ou qu'un API. Sans racune !
@+
21 août 2003 à 15:07
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter \ 3600), "00") & ":" & Format((Counter \ 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub
@+
21 août 2003 à 15:04
C'est vrais tu a raison j'ai mis // a la place des \ ce qui incremente a 30 au lieu de 60 ... (l'erreur est humaine ! lol)
Cela dit lorsque que tu programme qlq chose il vaus mieu avoir confiance au commande interne ou bien dans le cas contraire
change de language de prog... lol
Mais puisque que tu prefere une autre methode en voila une :
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter 3600), "00") & ":" & Format((Counter 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub
@+
21 août 2003 à 14:07
Evidement quand on choisit de faire confiance aux commandes internes...
Bref j'ai testé ton système ( je n'ai jamais utilisé format ) : PROBLEME !!!
Il incremente les heures quand il est la demi et non quand on arrive à 60 !!!!
Bref mon algo fait main est archaïque mais fiable !!!
@+
21 août 2003 à 13:55
je propose :
(timer1.interval=1000)
Private Sub Timer1_Timer()
Static Counter As Long
Counter = Counter + 1
Caption = Format((Counter / 3600), "00") & ":" & Format((Counter / 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
End Sub
@+
21 août 2003 à 10:15
J'ai regardé ta source, c'est le bordel !
On peut faire beaucoup mieux avec un seul timer ( 1 sec ) :
Private Sub Timer1_Timer()
'Incrémente les secondes
LblSeconds.Caption = LblSeconds.Caption + 1
'Mise en forme
If LblSeconds.Caption < 10 Then LblSeconds.Caption = "0" & LblSeconds.Caption
'On passe une minute, remise à zero et mise en forme
If LblSeconds.Caption = 60 Then
lblsecondes.Caption = "00"
lsblminutes.Caption = LblMinutes.Caption + 1
If LblMinutes.Caption < 10 Then LblMinutes.Caption = "0" & LblMinutes.Caption
End If
'On passe une heure, remise à zero et mise en forme
If LblMinutes.Caption = 60 Then
LblMinutes.Caption = "00"
LblHeures.Caption = LblHeures.Caption + 1
If LblHeures.Caption < 10 Then LblHeures.Caption = "0" & LblHeures.Caption
End If
'On passe un jour, remise à zero de tout
If LblHeures.Caption = 24 Then
lblsecondes.Caption = "00"
LblMinutes.Caption = "00"
LblHeures.Caption = "00"
End If
End Sub
Mais tu peut aussi mettre trois variables et afficher le tout dans un seul label !
tu noteras qu'il y a des commentaires !!! Même si ça parait facile il est necessaire de mettre des commentaires !!!
@+
PS : Envoie moi une capture de ton jeu !
21 août 2003 à 09:59
Sers toi de la fonction API gettickcount() (précis à la milliseconde) puis convertis la diiférence entre le temps actuel et le temps de réf en hh:mm:ss. Pour les 0 devant : instruction format
21 août 2003 à 09:41
Dites-moi ce que vous en pensez... et si il y a une facon plus vite, jaimerais le savoir pcq cé chian de faire ces copiers collers pour pas ke vb mette les 9 premiers chiffres tu seul, pour kil mette un 0 avant...