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.