Page 1 sur 1

passer un paramètre tableau à une fonction

MessagePosté: Mer Jan 19, 2005 12:20 pm
par guyton
Bonjour,
j'utilise la fonction suivante(récupérée sur le net) :elle retourne un tableau de points formant une ellipse servant de trajectoire pour un jeu de balles
function creTablePoints (cx, cy, xRad, yRad, max) {
points = new Array();
var space = 360/max;
for (var i = 0; i<max; i++) {
var theta = space*i;
theta %= 360;
var radians = (theta/180)*Math.PI;
this.x = cx+Math.cos(radians)*xRad;
this.y = cy+Math.sin(radians)*yRad;
this.points[i] = new Array();
points[i]["x"] = x;
points[i]["y"] = y;
}

return points;
}
la ligne suivante permet de récupérer ce tableau,
pts1 = this.creTablePoints(450, 250, 300, 300, 80);//80 pts pour la bal 1
pts2 = this.creTablePoints(450, 250, 200, 200, 60);//60 pts pour la bal 2
et ainsi de suite pour ttes les balles qu'on veut. Pour animer la balle, je fais appel à la fonction suivante :
cpt=0;
function deplaceBalle1(): Void {
this._x = pts1[cpt%80]["x"];// modulo 80 pour 8O pts
this._y = pts1[cpt%80]["y"];
cpt++;
if(cpt>600) {
delete this.onEnterFrame;
}
}
puis cette fonction est appelé avec onEnterFrame : balle1.onEnterFrame=deplaceBalle1;
Mon problème est que je n'arrive pas à réutiliser cette fonction plusieurs fois (j'ai essayé en passant le paramètre tableau en créant la fonction suivante
function deplaceBalle(pts:Array): Void {
this._x = pts[cpt%80]["x"];
this._y = pts[cpt%80]["y"];
cpt++;
if(cpt>600) {
delete this.onEnterFrame;
}
}
et cré chaque trajectoire en passant les tableaux : pts1, pts2,pts3, etc...
balle1.onEnterFrame=deplaceBalle(pts1);
balle2.onEnterFrame=deplaceBalle(pts2);
ça ne marche pas....
mais pour que ça marche (avec 2 balles) je suis obligé d'écrire une fonction par balle, ex pour la balle 2 :
function deplaceBalle2(): Void {
this._x = pts2[cpt%80]["x"];
this._y = pts2[cpt%80]["y"];
cpt++;
if(cpt>600) {
delete this.onEnterFrame;
}
}
balle2.onEnterFrame=deplaceBalle2;
et ainsi de suite pour chaque balle.

les balles sont des clips simples (cercle convertit en clip) positonnés sur la scène. je dois mal m'y prendre, c'est un peu confus, j'aurais bien joint le fichier .fla en pièce joint mais je ne sais pas si on peut...

Merci de m'éclairer, ... :?:

MessagePosté: Jeu Jan 20, 2005 9:44 pm
par Yagan
je laisse la parole aux specialistes ;) ...

... et je te souhaite juste la bienvenue chez les Fous guyton !

MessagePosté: Sam Jan 22, 2005 12:15 pm
par guyton
Merci pour ton accueil...

à bientôt

Guyton :roll:

euh...

MessagePosté: Jeu Jan 27, 2005 1:39 pm
par stiv
Question stupide : tu changes les parametres de courbe pour chaque balle ?

voila c repare

MessagePosté: Jeu Jan 27, 2005 2:07 pm
par stiv
function creTablePoints (cx, cy, xRad, yRad, max) {
points = new Array();
var space = 360/max;
this.points[0] = max;
for (var i = 1; i<=max; i++) {
var theta = space*i;
theta %= 360;
var radians = (theta/180)*Math.PI;
var x = cx+Math.cos(radians)*xRad;
var y = cy+Math.sin(radians)*yRad;
trace(x);
trace(y);
this.points[i] = new Object();
points[i].x = x;
points[i].y = y;
}
return points;
}

pts1 = new Array()
pts1 = this.creTablePoints(50, 50, 300, 300, 80);//80 pts pour la bal 1
pts2 = new Array();
pts2 = this.creTablePoints(60, 80, 200, 200, 60);//60 pts pour la bal 2

function deplaceBalle(){
trace("ok");
var tab = _root["pts"+this.n];
trace(this.cpt)
trace(tab[this.cpt].x)
this._x = tab[this.cpt].x;
this._y = tab[this.cpt].y;
this.cpt++;
if(this.cpt>tab[0]){
this.cpt = 1;
}
}

function prepareBalle(mc,num){
mc.n = num;
mc.cpt = 1;
mc.onEnterFrame=deplaceBalle;
}

prepareBalle(balle1,1)
prepareBalle(balle2,2)

MessagePosté: Jeu Jan 27, 2005 2:14 pm
par stiv
prepareballe sert a passer les valeurs a ton clip balle, comme ca pas besoin de faire 2 fonctions !

maintenant dans ton tableau, la case 0 correspond au nombre d'image necessaire pour un tour (la vitesse), je l'ai fait cycler aussi mais ca devait marcher aussi avant

et surtout j'ai modifié ton code de facon a simplifier en enlevant les termes un peu esoterique...

mais par contre ca fait juste des balles qui tournent...J'en ris aux éclats !

A+

stiv

MessagePosté: Sam Jan 29, 2005 1:04 pm
par guyton
Merci Stiv,

La question était sans doute stupide mais la réponse en vaut la peine. ça marche super bien.

A +

Guyton

:)

MessagePosté: Sam Jan 29, 2005 2:17 pm
par
Bon sang j'y comprends rien... mais ça fait plaisir de savoir qu'il y a des spécialistes ici...
:roll:
:x

+
c