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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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...

+ 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