Problème this et root

Résolu
mailys6
Messages postés
49
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
1 octobre 2005
- 4 avril 2005 à 16:11
cs_goldenboy68
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
- 5 avril 2005 à 15:45
J'ai un petit souci dans la fonction suivante :

this['Lb'+i].onRelease= function()
{
this.stopDrag();
cible = this._droptarget.substring(1);
this._x= _root[cible]._x;
this._y = _root[cible]._y;
}

C'est une fonction simple. J'ai un clip dont le nom commence par "Lb" suivi d'un numéro. Ce clip est créer dynamiquement avec createEmptyMovieClip. Lorsque je lâche le clip, si il y a un clip en dessous, alors je veux qu'il se mette aux mêmes coordonnées.
La fonction ci dessus fonctionne, seulement des paramètres qui ne dépendent pas de moi font que je ne peux utiliser _root[]. Dans ce cas, que dois-je utiliser ? J'ai essayé this :
this._x= this[cible]._x
mais ça ne marche pas. C'est compréhensible car dans ma fonction this est l'objet courant donc "Lb"+ i. Mais sinon je ne vois pas comment faire référence à "cible" qui se trouve sur la scène et qui est lui aussi un clip créer dynamiquement. Une idée ?

Merci d'avance

Mailys

6 réponses

cs_goldenboy68
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
5 avril 2005 à 11:20
Re,



...avec les 2 lignes qui se suivaient, j'avais pas vu de a++! lol



J'vais jeter un oeil à ton code...mais c'est plus pratique de
travailler sur le .fla pour voir où sont les erreurs (sans avoir à se
casser la tête pour refaire un nouveau fichier qui pourrait marcher
avec ton code...suis un peu fénéant ce matin!)



...première idée: quand tu testes ton animation, va voir dans
"Déboguer", "lister les objets"...tu verras le chemin exact où est créé
ton clip dynamiquement...



@+! Samy



PS: gold_samuel-codessources@yahoo.fr
3
cs_goldenboy68
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
5 avril 2005 à 14:22
Voilà:



this['Lb'+i].onRelease= function()

{

this.stopDrag();

cible_testSamy =
String(eval(this._droptarget)); //eval permet de récupérer
_level0.nomduclip au lieu de /nomduclip


cible_testSamy=cible_testSamy.substring(8,cible_testSamy.length-5); //
le 8, pour supprimer _level0. et -5 pour supprimer .txt1 (si t'as plus
de 10 labels...faudra tester et mettre -6, ou alors créer des txt01 )

trace(cible_testSamy);

this._x= this._parent[cible_testSamy]._x;

this._y = this._parent[cible_testSamy]._y;

//PS: ça marche pour un des 2
clips créés dynamiquement...mais y'a la méthode...suffira juste de voir
avec swapDepths() par exemple sur le onPress() et le onRelease()

}



...en espérant que ce soit suffisant pour répondre à ta question!



@+! Samy
3
cs_goldenboy68
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
5 avril 2005 à 15:45
aller, pour être complet:



this['Lb'+i].onPress = function()

{

this.swapDepths(1000); //c'est suffisant apparemment, pas besoin de gérer sur onRelease

this.startDrag();

}



@+! Samy
3
mailys6
Messages postés
49
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
1 octobre 2005

4 avril 2005 à 17:25
Dans la même fonction, j'ai également un autre problème. La cible étant un clip créée dynamiquement, je crois que je n'arrive pas à le voir.
Je m'explique :
Pour chaque clip que je veux déplacer, je crée un clip cible, de manière dynamique

this.createEmptyMovieClip('Lb'+i, a);
this.createEmptyMovieClip('Label'+i, a);

Label1 est la cible de Lb1, Label2 est la cible de Lb2 ... Je précise que Lb1, Lb2 ... contiennent un TextField, créer dynamiquement avec createTextField.

A l'origine Lb1, Lb2 ... sont placés à droite. Label1, Label2 ... sont placés sur un schéma. L'utilisateur doit placer correctement Lb1 sur Label1, Lb2 sur Label2 ...

Avec la fonction suivante, je n'arrive pas à récupérer le nom d'un clip créer dynamiquement.

this['Lb'+i].onRelease= function()
{
this.stopDrag();
cible = this._droptarget.substring(1);
this._x= _root[cible]._x;
this._y = _root[cible]._y;
}

C'est à dire, si je crée un clip avec l'interface de flash, et que je lâche Lb1, Lb2 ... sur ce clip, la variable "cible" de la fonction retourne bien le nom du clip. Mais si je lâche Lb1, Lb2 ... sur un clip que j'ai créée dynamiquement, "cible" est vide.

Est-ce donc impossible à faire ?
Merci pour votre réponse !

Maïlys
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_goldenboy68
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
5 avril 2005 à 00:45
extrait de ton message:



this.createEmptyMovieClip('Lb'+i, a);
this.createEmptyMovieClip('Label'+i, a);



tu crées dynamiquement 2 clips à la même profondeur! Change déjà ça...si ça marche pas...revient! lol



@+! Samy
0
mailys6
Messages postés
49
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
1 octobre 2005

5 avril 2005 à 10:25
C'était une bonne idée. Malheureusement entre les deux, j'incrémente "a". J'pensais que tu avais trouvé la solution à mon problème, mais non. J'vais encore galérer aujourd'hui. Voici l'intégrité de mon code, au cas où tu aurais une autre idée :

// NbLabels est mon nombre d'étiquettes à faire
for(i = 1 ;i<=currentQuizQuestion.NbLabels;i++)
{
a = a +1;

//Création du format du texte
myfmt = new TextFormat();
myfmt.font = "Microsoft Sans Serif";
myfmt.size = 10;
myfmt.align = "center";

//Création du premier clip, qui est placé sur le côté
this.createEmptyMovieClip('Lb'+i, a);
this['Lb'+i]._x = this._x + this._width - currentQuizQuestion.Labels[i].getW()-20;
this['Lb'+i]._y = nextLabel;

a = a + 1;

//Création d'un texte dans le movieClip
this['Lb'+i].createTextField('Txt'+i, a, 0,0, currentQuizQuestion.Labels[i].getW(), currentQuizQuestion.Labels[i].getH());

//Paramétrage du texte
with(this['Lb'+i][['Txt'+i]])
{
text = currentQuizQuestion.Labels[i].Txt;
setTextFormat(myfmt);
background = true;
backgroundColor = "0x" + currentQuizQuestion.DefaultColor;
border = true;
wordWrap=true;
selectable = false;
}
nextLabel = nextLabel + this['Lb'+i]._height + 10; // Pour placer les étiquettes les une en dessous des autres

a = a + 1;

//Création du clip qui servira de cible
this.createEmptyMovieClip("Label" + i,a);
//On dispose ce clip autour d'une image
this['Label'+i]._x = currentQuizQuestion.Labels[i].getX();
this['Label'+i]._y = currentQuizQuestion.Labels[i].getY();
this['Label'+i]._width = currentQuizQuestion.Labels[i].getW();
this['Label'+i]._height = currentQuizQuestion.Labels[i].getH();
//Pour chaque étiquette il peut y avoir plusieurs flèches
for(j=1;j<=currentQuizQuestion.Labels[i].getNbArrow();j++)
{
a = a + 1;
//Création de la flèche
this.createEmptyMovieClip('Arrow'+j,a);
//Paramétrage et création de la ligne
with(this['Arrow'+j])
{
lineStyle(currentQuizQuestion.ArrowBorder,"0x" + currentQuizQuestion.ArrowColor,100);
if(this['Label'+i]._x<this._width/2) //L'étiquette est à gauche de l'image
moveTo(this['Label'+i]._x + this['Label'+i]._width,this['Label'+i]._y + this['Label'+i]._height/2); //On fait la ligne du coin droit vers l'image
else //Sinon on fait la ligne du coin gauche vers l'image
moveTo(this['Label'+i]._x ,this['Label'+i]._y + this['Label'+i]._height/2);
lineTo(currentQuizQuestion.Labels[i].Arrows[j].ArX,currentQuizQuestion.Labels[i].Arrows[j].ArY);
}
}
//Définition des fonctions de déplacement
this['Lb'+i].onPress = function()
{
this.startDrag();
}
this['Lb'+i].onRelease= function()
{
this.stopDrag();
cible = this._droptarget.substring(1); //On récupère le clip qui est en dessous
//On applique les coordonnées du clip du dessous au clip lâché
this._x= _root[cible]._x;
this._y = _root[cible]._y;
}
}

C'est bizar que j'arrive à récupérer un clip "fixe" et pas un clip créer dynamiquement. Est-ce une limite de Flash ?

Merci d'avance en tout cas

Mailys
0