Bonjour à tous,

Pour vous situer le contexte, je suis en train de développer une application web permettant de retracer la route de véhicules professionnels en utilisant l'API GoogleMap.
J'ai voulu,implémenter une fonction qui ferait avancer un petit rond rouge (le véhicule) tout le long de sa route.
J'ai donc choisit d'utiliser la récursivitée (et donc setTimeout), en rappelant une fonction qui dessine un rond rouge à un point donné dans elle même (avec un nouveau point ).

Je vous explique mon probleme : Comme tout cela est en JavaScript j'ai placé quelques alert afin de pouvoir débugguer.... Et ma fonction marche parfaitement avec un alert placé au début de celle ci. Seulement lorsque je le retire (afin que le rond rouge avance tout seul sans faire "ENTRE" à chaque fois) le navigateur (que ce soit IE ou Firefox) explose.

Je me suis d'abord dit que l'interval de temps n'était pas assez grande, que la carte n'avait pas le temps de se rafraichir mais même avec une intervalle plus grande (et même très très grande ) ce la plante toujours.

Voici le code (ne faites pas attention aux commentaires...):

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
 
lancerParcours: function(dirIndex, pointIndex, interval){
        //alert("Début traitement");
        if(!this.fin)
        {
                // Dans le cas ou nous ne traitons pas le premier point
                // on supprime l'ancien cercle
                if(this.first) this.first = false;
                else 
                {
                    this.removeOverlay(this.Polygons[0]);
                    this.Polygons.splice(0,1);
                }                
                // on passe stepMarker a true. (afin de ne pas effectuer de callback)
                if(!this.stepMarker) this.stepMarker = true; 
                // on créé le cercle               
                if(!this.Polygons) this.Polygons = new Array();                
                this.Polygons.push(createCircle(this.Directions[dirIndex].getMarker(pointIndex).getLatLng(), 0.008, 60, 2, 1, "#a00000", 0.9, "#ff0000"));                
                // on l'affiche
                this.addOverlay(this.Polygons[0]);
                // on redefini le zoom                
                this.setZoom(16);
                // on centre la carte sur le cercle
                this.panTo(this.Directions[dirIndex].getMarker(pointIndex).getLatLng());
                // Dans le cas ou il reste des points a traiter dans la direction courante
                if(pointIndex < this.Directions[dirIndex].Waypoint.length-1) pointIndex++;                
                else
                {
                    // Si il n'y a plus de points on change de direction
                    if (dirIndex < this.Directions.length-1)
                    {
                        dirIndex++;
                        pointIndex = 1;                        
                    }
                    else this.fin = true;                   
                }
                // on rappelle la fonction avec une intervalle de "interval" ms
                setTimeout(this.lancerParcours(dirIndex, pointIndex, interval),interval);                
        }
        else alert("La tournée est terminée!");
    },

Voila, donc si quelqu'un aurait une idée ou une suggestion, je suis preneur ...