As3 problème de mouvement aleatoire de clip avec tween : ça bloque !
schanthery
Messages postés3Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 novembre 2009
-
22 nov. 2009 à 21:44
schanthery
Messages postés3Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 novembre 2009
-
23 nov. 2009 à 19:12
Bonjour
Je tente de faire des bulles qui bougent toutes seules mais au bout d'un certain temps mes bulles s'arrêtent de bouger sauf une !!! Je ne vois pas pourquoi. Pourriez vous m'aider?
Merci
voici mon code
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var nombre_de_bulles:uint=50;
var i:uint;
var speed:Number=120; // la diagonale devra etre parcouru en 120 images (5s)
var xmin,ymin,xmax,ymax:uint;
var diagonale:Number;
// les infos de la scène
xmin=0;
ymin=0;
xmax=stage.stageWidth;
ymax=stage.stageHeight;
//trace(xmin+" "+xmax+" "+ymin+" "+ymax);
// cacul de la diagonale
diagonale=Math.sqrt(Math.pow((xmax-xmin),2)+Math.pow((ymax-ymin),2));
//trace("diagonale="+diagonale);
// creation des bulles
for (i=0; i<nombre_de_bulles; i++) {
var new_bulle:bulle=new bulle();
new_bulle.x=stage.stageWidth/2;
new_bulle.y=stage.stageHeight/2;
addChild(new_bulle);
deplace(new_bulle);
}
function deplace(bulle:MovieClip) {
var distance:Number;
var xdest,ydest:uint;
var durée:Number;
// déterminstaion point de destination
xdest=Math.floor(Math.random()*(xmax-xmin))+xmin;
ydest=Math.floor(Math.random()*(ymax-ymin))+ymin;
//var total:Number=Math.pow((xdest-this.x),2)+Math.pow((ydest-this.y),2);
//trace("xdest="+xdest+" ydest="+ydest+" total="+total);
// caciul distance à parcourir
distance=Math.sqrt(Math.pow((xdest-bulle.x),2)+Math.pow((ydest-bulle.y),2));
//trace("distance à parcourir="+distance);
// calcul durée du parcours en images
durée=distance/diagonale*speed;
//trace("durée="+durée);
var myTweenx:Tween=new Tween(bulle,"x",None.easeIn,bulle.x,xdest,durée,false);
var myTweeny:Tween=new Tween(bulle,"y",None.easeIn,bulle.y,ydest,durée,false);
myTweenx.addEventListener(TweenEvent.MOTION_FINISH,myTweenx_motion_finish);
}
function myTweenx_motion_finish(evt:TweenEvent) {
//evt.currentTarget.removeEventListener(TweenEvent.MOTION_FINISH,myTweenx_motion_finish);
deplace(evt.currentTarget.obj);
}
schanthery
Messages postés3Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 novembre 2009 23 nov. 2009 à 18:48
C'est mieux présenté comme cela ma question:
Bonjour
Je tente de faire des bulles qui bougent toutes seules mais au bout d'un certain temps mes bulles s'arrêtent de bouger sauf une !!! Je ne vois pas pourquoi. Pourriez vous m'aider?
Merci
voici mon code
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var nombre_de_bulles:uint=50;
var i:uint;
var speed:Number=120; // la diagonale devra etre parcouru en 120 images (5s)
var xmin,ymin,xmax,ymax:uint;
var diagonale:Number;
// les infos de la scène
xmin=0;
ymin=0;
xmax=stage.stageWidth;
ymax=stage.stageHeight;
//trace(xmin+" "+xmax+" "+ymin+" "+ymax);
// cacul de la diagonale
diagonale=Math.sqrt(Math.pow((xmax-xmin),2)+Math.pow((ymax-ymin),2));
//trace("diagonale="+diagonale);
// creation des bulles
for (i=0; i<nombre_de_bulles; i++) {
var new_bulle:bulle=new bulle();
new_bulle.x=stage.stageWidth/2;
new_bulle.y=stage.stageHeight/2;
addChild(new_bulle);
deplace(new_bulle);
}
function deplace(bulle:MovieClip) {
var distance:Number;
var xdest,ydest:uint;
var durée:Number;
// déterminstaion point de destination
xdest=Math.floor(Math.random()*(xmax-xmin))+xmin;
ydest=Math.floor(Math.random()*(ymax-ymin))+ymin;
//var total:Number=Math.pow((xdest-this.x),2)+Math.pow((ydest-this.y),2);
//trace("xdest="+xdest+" ydest="+ydest+" total="+total);
// caciul distance à parcourir
distance=Math.sqrt(Math.pow((xdest-bulle.x),2)+Math.pow((ydest-bulle.y),2));
//trace("distance à parcourir="+distance);
// calcul durée du parcours en images
durée=distance/diagonale*speed;
//trace("durée="+durée);
var myTweenx:Tween=new Tween(bulle,"x",None.easeIn,bulle.x,xdest,durée,false);
var myTweeny:Tween=new Tween(bulle,"y",None.easeIn,bulle.y,ydest,durée,false);
myTweenx.addEventListener(TweenEvent.MOTION_FINISH,myTweenx_motion_finish);
}
function myTweenx_motion_finish(evt:TweenEvent) {
//evt.currentTarget.removeEventListener(TweenEvent.MOTION_FINISH,myTweenx_motion_finish);
deplace(evt.currentTarget.obj);
}
schanthery
Messages postés3Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 novembre 2009 23 nov. 2009 à 19:12
J'ai trouvé la solution comme un grand
Il s'agit d'un bug connu qui efface les tweens de la mémoire quand il y en a trop
Il suffit de stocker chaque tween dans un tableau
Ce qui donne
var myTweenx:Tween=new Tween(bulle,"x",None.easeIn,bulle.x,xdest,durée,false);
var myTweeny:Tween=new Tween(bulle,"y",None.easeIn,bulle.y,ydest,durée,false);
tableau_tweenx.push(myTweenx); // mise en tableau pour forcer à conserver en mémoire cf bug connu tween
tableau_tweeny.push(myTweeny);