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

JavaScript Discussion :

[POO] setTimeout et clearTimeout


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut [POO] setTimeout et clearTimeout
    Bonjour,

    je planche, depuis plusieurs semaine, sur un problème qui ne devrait pas en être un (normalement !), en effet je suis en train de créer un mini moteur physique, en fait il s'agit d'un script qui gèrera différents objets qui devront obéir aux lois de la physique, rien de surprenant ou de compliqué jusque là mais ma démarche et la suivante, chaque objet instancié sont enregistrés dans un tableau d'Objet (appelé artefact), j'aurais appliqué pour chacun une animation donc un setTimeout et pouvoir l'arreter avec le clearTimeout mais rien ne va !

    concrètement le problème est que lorsqu'un objet est animé, il passe impécable mais avec plusieurs objets l'animation se dérègle au niveau du setTimeout, sans doute !

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    /*****************************************************
    ---------------------------------------------------------------------
    Action des deux bouttons Start et Stop							
    ---------------------------------------------------------------------
    ******************************************************/
    function action(nb){	
    	if(nb==2)for(i=1;i<anim.length;i++)clearTimeout(anim[i].anima);
    	else for(i=1;i<artefact.length;i++){
    		anim[i]=new animObj(artefact[i].nbId,artefact[i].nom,true);
    		anim[i].anima(i,false,artefact[i].nom,anim[i].varTemp);
    		}
    }
    function animObj(unId,quid,varTemp){
    	this.varTemp=varTemp;
    	this.unId=unId;
    	this.quid=quid;
    	this.anima=go;
    	this.cls=stop;
    }	
     
    function go(unId,arret,quid,varTemp){
    	anim[unId]=this;
    	this.unId=unId;
    	this.arret=arret;
    	this.quid=quid;
    	setTimeout("animationdEnsemble("+this.unId+","+arret+",'"+this.quid+"',"+varTemp+")",1);
    }
    function stop(unId){
    	parseInt(this.unId=unId);
    	clearTimeout(anim[this.unId].anima);
    }
    /*****************************************************
    ---------------------------------------------------------------------
    cinematique de l'attraction terrestre / objets							
    ---------------------------------------------------------------------
    ******************************************************/
    function animationdEnsemble(unId,arret,quid,varTemp){
    	this.h=h;
    	this.t=t;
    	this.unId=unId;
    	this.arret=arret;
    	this.quid=quid;
    	this.topOffset=artefact[this.unId].y;
    	this.getQui=document.getElementById(quid);
    	this.monSens=artefact[this.unId].direction;	
     
    	if(!this.arret && artefact[this.unId].estMobile){			
    	//je tombe SI le temps est inférieur au temps calculé
    		if((this.t<this.tFinal && !this.monSens) || (this.h>=1 && this.monSens)){
    			!this.monSens?this.top=round(this.topOffset+(t*t*g/2)):this.top=round(this.topOffset-(this.t*this.t*g/2));
    			getQui.style.top=this.top;
    			this.topOffset=this.top;
    			this.t+=0.1;						
    			//je calcule les nouvelles données pour la remontée
    		  if(this.t>=this.tFinal){
    				this.t=0;
    				!this.monSens?this.topOffset+=this.h:this.topOffset-=this.h;
    				this.top=round(this.topOffset);
    				!this.monSens?this.h=pow(this.vFinale*(1-perte),2)/(2*g):this.h;
    				!this.monSens?this.vFinale=0:this.vFinale=sqrt(2*g*this.h);
    				this.tFinal=sqrt(2*this.h/g);
    				!this.monSens?artefact[this.unId].direction=true:artefact[this.unId].direction=false;
    				if(this.h>=1)anim[this.unId].cls();
     
    			}			
    		}
    	}
    	if(varTemp){
    		varTemp=null;
    		anim[this.unId].anima(this.unId,false,artefact[this.unId].nom,null);
    	}
    	else {	anim[this.unId].cls(this.unId);	anim[this.unId].anima(this.unId,false,artefact[this.unId].nom,null);	}	
    }


    J'attends avec impatience vos remarques sur ce problème!
    PS: ç'est mon premier post, je ferais de mon mieux pour la clarté. j'ai pensé ne mettre qu'un fragment de mon code mais je passe le tout en PJ.

  2. #2
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut
    Personne n'a une solution pour démarrer et stopper plusieurs Timer sans problème ?

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut
    J'ai enfin réussi, après plusieurs tentatives à appliquer la méthode setTimeout et clearTimeout à chaque objet , il suffisait en fait :

    1°/ de créer une Classe d'animation des objets avec deux méthodes appliquées à chaque nouveau objet instancié, un pour le lancement et l'autre pour l'arret.

    2°/ d'appeler tous les objets grâce à obj[n].maMethodeStart(arg1,arg2,arg2) qui renvoie à la fonction start(arg1,arg2,arg2), qui fait un return de id[n]=setTimeout(maFonctionDanimation,Délai,arg1,arg2,arg2)

    3°/ d'arreter l'animation avec obj[n].maMethodeStop(arg1,arg2,arg2)

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

Discussions similaires

  1. setTimeout ne se stoppe pas avec le clearTimeout
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2011, 12h36
  2. Gestion de timers setTimeout /clearTimeout
    Par kilodor dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/08/2010, 09h25
  3. [POO] Souci avec la fonction SetTimeOut
    Par talrashha dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/09/2008, 20h25
  4. [POO] setTimeout qui appelle fonction de ma classe
    Par Jérémy Lefevre dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 07/02/2008, 18h45
  5. [POO] Passet un objet avec la fonction setTimeout()
    Par Death83 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 27/08/2007, 22h36

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