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 3 Discussion :

Timer en AS3


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut Timer en AS3
    Bonjour !

    Je suis actuellement en train d'essayer de créer un petit jeu en AS3 mais j'ai un petit problème avec mon Timer, mais d'abord le code !

    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
     
    //Imports Flash
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.Event;
     
    //Création du timer
     
    var monTimer:Timer = new Timer(1000,vie); //Temps (milli-secondes), nombre de répétition
    monTimer.addEventListener(TimerEvent.TIMER, boucleTimer); //Executé à chaque fin de boucle
    monTimer.addEventListener(TimerEvent.TIMER_COMPLETE, finTimer); //Executé fin timer
    monTimer.start(); //Lancement du timer
     
    //Fonction executé à chaque boucle
     
    function boucleTimer(e:TimerEvent):void{
    	if(vie>=21){
    		vie=20;
    	}	
     
    	// vérifie la collision
    	if(heros.hitTestObject(decor1hit)) {
    		vie=vie;
    	} else {
    		vie=vie-1;
    	}
     
    	trace(vie);
     
    	if(vie==0){
    		removeChild(heros);
    	}
    } 
     
    function finTimer(e:TimerEvent):void{
    	trace("fin de timer");
    }
    Ma variable "vie" a une valeur de 20 et mon compteur commence donc à décompter à partir de 20. Cependant j'aimerai que lorsque je touche l'objet "decor1hit" le conteur ne continue pas à descendre même si la variable vie stagne ou augmente mais qu'il recommence à partir de la valeur actuelle de "vie".

    J'espère que je me suis bien exprimé et remercie d'avance ceux qui auront l'amabilité de me répondre.

  2. #2
    Membre éclairé Avatar de SnowStyle
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Par défaut
    ça fait un moment que je n'ai pas flashé, mais bon ça aurait été bien de décrire ce que fait ton code actuel aussi et pas uniquement ce que tu voudrais qu'il fasse, ça évite de jouer aux devinettes

    mais bon comme ça je dirai peut être que ton compteur s'arrête au bout d'un moment quoi que tu fasses ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    Pour le reste du code ce n'est pas spécialement compliqué j'ai 2 objets : "heros" et "decor1hit" et une variable "vie=20".
    J'ai programmé les déplacements du héros et veut faire en sorte que la vie ne descende plus lorsque le héros touche "decor1hit", cependant en effet le Timer ne s’arrête pas car ne se réactualise pas en fonction de la variable "vie".
    Il prend sa valeur pour le départ du décompte (qui est de 20) mais même si "vie" augmente ou stagne, le compteur poursuit invariablement son décompte. J'aimerai donc savoir si il était possible que le temps du décompte puisse varier continuellement en fonction de la variable "vie".

    En gros oui c'est ça mon compteur s'arrête au bout d'un moment quoi que je fasses

  4. #4
    Membre éclairé Avatar de SnowStyle
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Par défaut
    C'est ce qui me semblait, sans être sûr à 100% non plus

    Mais me semble bien que quand tu définis le décompte en créant le Timer, une fois fait il retourne la valeur de ta variable et puis ça démarre, si tu changes la valeur de ta variable il s'en fiche ton Timer vu qu'il ne s'en sert plus il n'a plus que la valeur 20 qui diminue donc.
    A mon avis tu dois oublier l'idée que le Timer et la vie sont reliés de cette manière.

    Je pense que l'idéal c'est que tu lances ton Timer de manière infini, maintenant pour faire ça je ne m'en rapelle plus, je ne sais plus si tu peux mettre 0 dans le décompte ou ne rien mettre ou si tu dois le relancer à chaque fois dans l'event.

    En tout cas l'idée c'est que ton Timer il décompte sans arrêt, et c'est dans ton trigger event que tu vas contrôler où en est la vie pour savoir si tu stoppes le Timer ou pas.
    Donc en gros une fois à zéro ben tu kill le Timer.

    Concernant ton code, vie=vie; ne sert à rien donc

    La difficulté c'est que ton Timer, quand ton héros hitTest l'object, tu dois arrêter le timer et le relancer quand le héros n'hitTest plus l'object, donc quand il sort de la zone de protection j'imagine, de manière à ce que le rythme du décompte soit toujours de 1sec par point de vie.
    Si tu laisses le Timer en boucle tout le temps, le gars il peux sortir de la zone et se prendre -1 vie en 0.01sec parce que ça tomberait pile poil sur un tick du Timer, ce qui serait pas cool si il est sensé avoir 1sec entre chaque blessure.

    Pour faire ça, vu que ton héros se déplace au clavier, tu as des fonctions qui gère ça, c'est là dedans que tu verifie si le héros est en hitTest sur un des objets, quand le héros arrive dessus hop tu kill le timer, et au moment ou il sortira de la zone tu pourras le relancer. D'ailleurs au moment d'entrer dans cette zone rien ne t'empêchera de tuer ce timer pour le relancer tout de suite en changeant juste une var qui va le transformer en +1vie par sec à la place, si tu songes à redonner de la vie par exemple.

    Voilà en esperant que ça te mette au moins un peu sur une voie à suivre

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    Merci beaucoup pour tes réponses si rapides

    En effet faire tourner le Timer à l'infini semble être une bonne idée auquel je n'avais pas pensé , je vais donc aller tester ça dans la journée (dès que j'aurai trouvé comment on fait )

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

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

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