amélioration de systeme de chrono

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur

est-ce que le script peu être améliorer selon vous?

définitivement (oui)
3
100%
je crois
0
Aucun vote
je ne pense pas
0
Aucun vote
non
0
Aucun vote
 
Nombre total de votes : 3

Geek_Qc
Messages : 2
Inscription : 07 Fév 2020 02:11

amélioration de systeme de chrono

Message par Geek_Qc » 26 Fév 2020 04:07

J'ai fait un système de chrono qui fonctionne très bien mais je voulais juste savoir si c'étais possible d'améliorer le code (comme le rendre plus compacte)

voici le code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{
    public GameObject timerUI;  //assingez a un text UI (pour aficher ou caché le chrono alors facultatif)
    public float timer = 0f;    //calcure par Time.DeltaTime
    public Text timeText;       //assingez a un text UI (pour modifier le text/temps)
    public int timerSecond;     //second du timer
    public int timerMinute;     //minute du timer

    void Update()
    {
        timer += Time.deltaTime;
    }

    void OnGameEnd()
    {
        timerUI.SetActive(true);
        timerSecond = (int)timer;
        timerMinute = (int)timerSecond / 60;
        timerSecond -= timerMinute * 60;

        if(timerMinute >= 10 && timerSecond >= 10) //11:11
        {
            timeText.text = "time: " + timerMinute + ":" + timerSecond.ToString ();
        }
        else if(timerMinute <= 9 && timerSecond <= 9) //01:01 OU 00:00
        {
            timeText.text = "time: 0" + timerMinute + ":" + "0" + timerSecond.ToString ();
        }
        else if(timerMinute <= 9 && timerSecond >= 10) //01:11 OU 00:11
        {
            timeText.text = "time: 0" + timerMinute + ":" + timerSecond.ToString ();
        }
        else if(timerMinute >= 10 && timerSecond <= 9) //11:01 OU 11:00
        {
            timeText.text = "time: " + timerMinute + ":" + "0" + timerSecond.ToString ();
        }
    }
}
les "1" représente une valeur supérieur a 0
les "0" représente une valeur égale a 0

vous pouvez parfaitement utiliser le scipt sans problème,vous avez juste à créer un chrono et l'assigné à la variable Text "timeText"

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: amélioration de systeme de chrono

Message par djulio74 » 26 Fév 2020 08:30

alors en effet je pense que cela est optimisable.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{
	public GameObject timerUI;  //assingez a un text UI (pour aficher ou caché le chrono alors facultatif)
	public float timer = 0f;    //calcure par Time.DeltaTime
	public string timeText;       //assingez a un text UI (pour modifier le text/temps)
	public int timerSecond;     //second du timer
	public int timerMinute;     //minute du timer

	void Update()
	{
		timer = Time.realtimeSinceStartup;
	
		timerSecond = (int)timer;
		timerMinute = (int)timerSecond / 60;
		timerSecond -= timerMinute * 60;

		timeText = "time: " + timerMinute.ToString("d2") + ":" + timerSecond.ToString ("d2");

	}
}
J'ai juste changé le Text par string, juste pour le test mais pas de soucis pour le faire avec ta version de Text.
en fait le "d2" du Tostring va indiquer que tu veux deux entier, donc même si timerMinute ou timerSecond <10, tu aura toujours un 0 devant.

et même une autre façon pour t'eviter un incrément du timer dans l'Update :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{

	public float timer;    //calcure par Time.realtimeSinceStartup
	public string timeText;       //assingez a un string
	public int timerSecond;     //second du timer
	public int timerMinute;     //minute du timer


	// fonction a appeler au lancement d'une partie
	void OnGameStart(){
		// recupere le temps en seconde depuis le lancement de l'appli/standalone..
		timer = Time.realtimeSinceStartup;
	}

	// fonction a appeler a la fin de la partie/gameOver...
	void OnGameEnd()
	{
		// deduis au temps total depuis le lancement de l'appli le temps total au oment du debut de la partie
		timer = Time.realtimeSinceStartup - timer;
	
		timerSecond = (int)timer;
		timerMinute = (int)timerSecond / 60;
		timerSecond -= timerMinute * 60;

		// converti en string tes timer pour avoir toujour un nombre a deux chiffre
		timeText = "time: " + timerMinute.ToString("d2") + ":" + timerSecond.ToString ("d2");

	}
}

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6215
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: amélioration de systeme de chrono

Message par boubouk50 » 26 Fév 2020 09:16

L'update () est utile uniquement si tu affiches le temps sur ton chronomètre en temps réel, ce que tu ne fais pas, donc il est inutile.
Aussi, j'utiliserai plutôt une coroutine qu'un Update (). Ici, le timer est incrémenté ad vitam eternam, à moins de désactiver le script. Dans une coroutine tu as la main. L'update () est aussi plus gourmand. (il en faut tout de même des centaines pour voir une réelle différence)
Aujourd'hui, les compilateurs font beaucoup de travail d'optimisation pour nous, et tant mieux, mais d'antan il valait mieux faire une multiplication par l'inverse plutôt qu'une division. je ne sais pas si c'est encore vrai.
Quant aux conditions pour ajouter un 0 avant les nombres inférieurs à 10, il existe déjà un format pour cela.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »