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

ActionScript 1 & ActionScript 2 Discussion :

Chronomètre et convertion de temps


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut Chronomètre et convertion de temps
    Hello, je vous demande un peu d'aide car j'essaie de faire un chronomètre pour un parcours de jeu... Je donne la possibilité à l'utilisateur de faire un parcours chronométré de 4 jeux successifs. A la fin, le lui donne son temps général. De plus, il peut voir le temps s'écouler sur l'ecran au niv. du swf principal.
    J'ai un swf principal sur lequel j'ai placé ma fonction timer. Cette fonction est appellé au début de chacun des jeux chargés. Les 4 jeux sont chargés via "LoadClip" dans un Loader.

    Mon code sur le swf principal est le suivant :

    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
    18
    19
    function updateTimer():Void {
    		tempsInitial = new Date();
    		lancerChrono = setInterval(afficherTemps, 10);
    };
     
    afficherTemps = function () {
    	nb_sec = ((new Date()-tempsInitial)/1000);
    	heures = Math.floor((nb_sec+temps_parcours)/3600);
    	minutes = Math.floor((nb_sec+temps_parcours)/60);
    	secondes = Math.floor((nb_sec+temps_parcours)-Math.floor(minutes*60));
    	milliSecondes = (nb_sec%Math.floor((nb_sec+temps_parcours)));
    	traitementMilliSecondes = String(milliSecondes);
    	milli = traitementMilliSecondes.substr(2, 2);
    	// 
    	minutes = minutes<=9 ? minutes="0"+minutes : minutes;
    	secondes = secondes<=9 ? secondes="0"+secondes : secondes;
    	montemps =  minutes+":"+secondes+":"+milli;
    	temps.text=montemps;
    };
    Mon code pour lancer le chronomètre au début de chaque jeu est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._parent.updateTimer();
    A la fin du jeu, je mets le temps en pause via ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clearInterval(_parent.lancerChrono);
    Et j'ajoute à la variable "temps_parcours" le nb de secondes passées durant le jeu via ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _parent.temps_parcours+=_parent.nb_sec;
    Mon pb est le suivant : Arrivé à un certain moment, les minutes ne s'affichent plus mais un point les remplace... Le temps s'affiche donc comme cela :
    1min'.7sec'43 à la place de : 1min'27sec'43... J'ai remarqué que c'est toujours le chiffres des dizaines au niveau des minutes qui déconne... Et cette erreur intervient à partir du troisième jeu chargé dans mon loader.

    Pouvez-vous me dire qu'est ce qui ne va pas dans mon code? Je suppose qu'il doit y avoir bien plus simple et plus propre non?

  2. #2
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Alors, je sais pas d'où viens ton problème, mais en tout cas tu peux faire plus simple, c'est pas une bonne idée d'utilise la class Date et de te servir des intervals. Moi j'aurais fait comme ça :

    En AS3 :
    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
    18
    19
    20
    21
    22
    23
     
    var Temps:int;
     
    function Chrono_Start():void {
    	Temps = getTimer();
    	stage.addEventListener(Event.ENTER_FRAME, Deroulement);
    }
     
    function Deroulement(E:Event):void {
    	var TotalMilli:int = getTimer()-Temps;
    	var MS:int = TotalMilli%1000;
    	var S:int = (TotalMilli/1000)%60;
    	var M:int = (TotalMilli/60000)%60;
    	Texte.text = M+":"+S+":"+MS;
    }
     
    function Chrono_Stop():int {
    	stage.removeEventListener(Event.ENTER_FRAME, Deroulement);
    	var TempsEcoule:int = getTimer()-Temps;
    	return TempsEcoule;
    }
     
    Chrono_Start();
    En AS2 :
    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
    18
    19
    20
    21
     
    function Chrono_Start() {
    	Temps = getTimer();
    	onEnterFrame = Deroulement;
    }
     
    function Deroulement() {
    	var TotalMilli = getTimer()-Temps;
    	var MS = TotalMilli%1000;
    	var S = Math.floor(TotalMilli/1000)%60;
    	var M = Math.floor(TotalMilli/60000)%60;
    	Texte.text = M+":"+S+":"+MS;
    }
     
    function Chrono_Stop() {
    	delete onEnterFrame;
    	var TempsEcoule = getTimer()-Temps;
    	return TempsEcoule;
    }
     
    Chrono_Start();

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    salut,

    merci de t'être penché sur mon pb !

    Alors j'ai regardé un peu ta solution et j'ai essayé de l'appliquer... Mais ya un truc qui ne va pas... Je n'arrive pas à faire une pause dans le temps.
    J'ai donc mis ce code sur mon swf principal :

    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
    18
    function Chrono_Start() {
    	Temps = getTimer();
    	onEnterFrame = Deroulement;
    }
     
    function Deroulement() {
    	var TotalMilli = getTimer()-Temps;
    	var MS = TotalMilli%1000;
    	var S = Math.floor(TotalMilli/1000)%60;
    	var M = Math.floor(TotalMilli/60000)%60;
    	temps.text = M+":"+S+":"+MS;
    }
     
    function Chrono_Stop() {
    	delete onEnterFrame;
    	var TempsEcoule = getTimer()-Temps;
    	return TempsEcoule;
    }
    et j'ai mis ce bout de code dans mes jeux pour lancer le chrono (ou le faire repartir apres sa pause)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._parent.Chrono_Start();
    et ce bout de code pour arréter le chrono et le mettre en pause en attendant le démarage du jeu suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._parent.Chrono_Stop();
    Mais ça ne marche pas. Le chrono ne s'arrète pas ou parfois il se remet carément à 0 lorsqu'un jeu démare...

    Tu sais pourquoi?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    en fait c'est moi qu'à déconné sur le "this._parent.Chrono_Start" en fait c'est plutot "_parent.Chrono_Start" ... Donc là ça marche car le chrono se lance, l'affichage marche bien mais le temps reviens systématiquement à 0 lorsque le jeu suivant démarre.. En fait il faudrait trouver le moyen de faire une pause

  5. #5
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Ok, j'avais pas compris comme ça. Mais c'est tout simple tu peux faire comme ça :

    Lorsque tu arrête ton premier Chrono avec Chrono_Stop(), cette fonction te renvoie le temps écoulé. Tu met ce temps dans une variable et juste après avoir démarrer ton deuxieme chrono tu decale ton Chrono avec cette valeur. Comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Premier Chrono
    Chrono_Start();
     
    // Le joueur joue
     
     
     
    // Arrêt du Chrono
    var TempsEcoule = Chrono_Stop();
     
    // Lancement du deuxième Chrono avec décalage 
    // (bien lancer le Chrono avant le décalage)
    Chrono_Start();
    Temps = Temps-TempsEcoule

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    Re !

    bon excuses moi j'dois etre un peu à la ramasse mais je n'y arrive pas

    Alors, je récapitule, j'ai essayé deux choses.
    La première c'était de mettre sur mon swf principal le code :
    Temps = Temps-TempsEcoule;

    La seconde était de mettre ça au niveau du code de mon second jeu. J'ai donc mis :
    _parent.Chrono_Start();
    Temps = Temps-TempsEcoule;

    Et ça remet tjrs le chrono à zero...
    J'avais également tenté de mettre une variable dans la fonction "Chrono_Start()" par exemple le nb de milisecondes écoulées durant les jeux précédents. L'idée était d'ajouter ce nb de miliseconde au temps lorsqu'il reprend (en fait, ça fait comme une pause finalement) mais je n'ai pas réussi non plu...

  7. #7
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Il faudrais que tu me donne le fla ou alors que tu affiche tout ton code pour que je puisse voir ce qui ne vas pas ^^

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    salut,

    malheureusement mon fla est assez enorme premièrement, deuxièmement il fait appelle à des swf (les jeux), donc il faudrait aussi que je te passe les jeux, enfin, le tout ne peut marcher qu'avec easyphp (le ctrl+entrée ne fonctionne pas) donc j'ai bien peur qu'on soit un peu bloqué!
    En revanche, j'ai quelqu'un sur un autre forum qui m'a dit :

    définir les valeurs temps écoulé en global ?

    Dans le start, tu déclares Temps comme départ, dans le stop, tu l'utilise pour le chrono.
    Si tu lances un nouveau jeu, tu redéclare le temps comme départ, au lieu de le conserver et de stocker le nouveau getTimer

    En fait, pour faire une pause, tu as un temps de départ TD, le début de la pause DP, la fin de la pause FP et la fin du temps FT

    Ton temps écoulé est FT-FP+DP-TD.

    A chaque pause, tu dois calculer DP-TD qui te donne le temps déjà écoulé, que tu ajoutes au total final.

    Enfin, il me semble.
    T'en penses quoi?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    je me demande aussi un truc... Ou dois-je placer "TempsEcoule = Chrono_Stop();" ? Juste après le fonction Chrono_Start dans mon swf principal? ou bien juste après le Chrono_Stop dans mes jeux? Auquel cas je dois mettre "_parent.TempsEcoule = _parent.Chrono_Stop();"...
    Et faut-il que je déclare un nouveau GetTimer?


  10. #10
    Membre confirmé Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Je crois que j'ai fait une erreur, je te refait tout ça proprement :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ListeTemps = new Array();
    TempsTotal = 0;
    DernierTemps = 0;
     
    function Chrono_Start() {
    	if (onEnterFrame == undefined) {
    		if (Temps == undefined) {
    			Temps = getTimer();
    		} else {
    			Temps = getTimer()-TempsTotal;
    		}
    		onEnterFrame = Deroulement;
    	}
    }
     
    function Deroulement() {
    	var TotalMilli = getTimer()-Temps;
    	var MS = TotalMilli%1000;
    	var S = Math.floor(TotalMilli/1000)%60;
    	var M = Math.floor(TotalMilli/60000)%60;
    	Texte.text = M+":"+S+":"+MS;
    }
     
    function Chrono_Pause() {
    	if (onEnterFrame != undefined) {
    		delete onEnterFrame;
    		var TempsEcoule = getTimer()-Temps;
    		DernierTemps = TempsEcoule-TempsTotal;
    		ListeTemps.push(DernierTemps);
    		TempsTotal = TempsEcoule;
    	}
    }
     
    function Chrono_Reset() {
    	Temps = undefined;
    	ListeTemps = new Array();
    	TempsTotal = 0;
    	DernierTemps = 0;
    }
    Voila, là ça devrais aller :p

    Pour lancer le Chrono, tu fait Chrono_Start()

    Pour le mettre en pause tu fait Chrono_Pause() et une fois que c'est fait, tu peux récupérer le temps du dernier niveau avec la variable "DernierTemps" ou alors le temps total avec la variable "TempsTotal". Aussi, tu peux récupérer tout les temps des niveau précédent avec le tableau "ListeTemps".

    Si tu veux remettre le Chrono à zero, utilise la fonction Chrono_Reset()

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Lancement de ton Chrono
    Chrono_Start();
    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
     
    // Le joueur à fini le premier niveau
    // Tu arrête le Chrono
    Chrono_Pause();
     
    // Puis tu récupère tes valeurs
    // Le temps passé à ce niveau
    trace(DernierTemps);
     
    // Le temps total passé dans tout les niveau
    trace(TempsTotal);
     
    // La liste des temps de chaque niveau
    trace(ListeTemps);
     
    // Puis tu lance le Chrono du niveau suivant
    Chrono_Start();
    Voila, j'espère que ça te conviendra

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    Vraiment super

    Merci mille fois de t'être penché sur mon pb et d'avoir passé du temps à le résoudre !

    C'est impecable, là, tu m'en a même donné plus que ce que j'espèrais ! Donc, à la phrase :
    Voila, j'espère que ça te conviendra
    je te répondrais :

    Ca me convient PARFAITEMENT !

    Merci encore

    ps : t'es balaise en AS c'est ton métier? Tu t'es déjà mise à l'AS3 à ce que je vois en plus...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    heuuu....
    Encore une dernière petite question
    J'essaie de convertir "DernierTemps" qui est un chiffre en milliseconde sous la forme min/sec/millisec.

    J'ai essayé de faire ce genre de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Affichage du dernier temps
    	var MS_dernier = DernierTemps%1000;
    	var S_dernier = Math.floor(DernierTemps/1000)%60;
    	var M_dernier = Math.floor(DernierTemps/60000)%60;
    	Affichage_dernier.text = M+":"+S+":"+MS;
    Mais ça ne marche pas.. undefined.
    T'aurais pas une idée?

    Apres promi j't'embètte plus

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 65
    Par défaut
    c'est bon ! J'ai trouvé tout seul ! T'auras même pas besoin de me répondre
    En fait je n'avais pas placé mes lignes de code au bon endroit. Il faut les mettre dans la fonction Deroulement. Ce que je n'avais pas fais.

    Merci encore
    cette fois tout est résolu .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertion variable temps
    Par F.Salenko dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/11/2011, 05h11
  2. chronomètre pour mesure de temps
    Par scarfunk dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/05/2010, 15h49
  3. Réponses: 2
    Dernier message: 25/08/2008, 10h13
  4. convertion d'un temps ( base 100 000 ) en heure minute
    Par laurent7474 dans le forum Oracle
    Réponses: 7
    Dernier message: 27/04/2007, 09h42
  5. Réponses: 7
    Dernier message: 01/06/2006, 16h43

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