Identification d'un clip dynamique

Résolu
Signaler
Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
-
Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
-
Salut tout le monde



Alors j'ai un ptit soucis ( logique sinon je posterais pas une question )

( J'ai deja poste ma question y a une heure ou deux mais c etait en
reponse a un ancien sujet datant de 2004 donc je me permets de le
replacer afin qu on puisse eventuellement voir le probleme et peut etre
y apporter une solution )

( vous pouvez retrouver la conversation sur laquelle je me base ici : http://www.flashkod.com/forum.v2.aspx?id= 344789 )



Alors c est simple, j'affiche dynamiquement des clip contenant un bouton à l'aide de la fonction attachMovie

Lors de la création je les dispose sur ma scène, jusque la pas de soucis.



Le problème arrive maintenant, j'aimerais que lorsqu on clique sur un
des clip chargé il se passe une action. Mais cette action dépendrait du
clip qui a été cliqué.

Donc si j ai chargé avec des attachMovie 10 clip : clip1,clip2, clip3, etc ...

J'aimerais appliquer une action A sur le clip 1, une action B sur le 2 etc ...



Ce que je n'arrive pas à faire ( malgré la
solution proposée sur l ancien post ) c de réussir a déterminer sur
quel clip l'utilisateur a cliqué.



Je remets ici la solution qui a été trouvée par robertours :

La solution fixer la valeur d'une variable pour chaque copie, c'est de
faire suivre le duplicatemovieclip par la définition de fonction :

this["Bouton"+_root.NumBouton].onRollOver = function()

{txt = this._name; }

this["Bouton"+_root.NumBouton].txt.text = "Bouton"+_root.NumBouton;



J'ai pas vraiment compris le fonction de ce code.



J'aimerais autant que possible minimiser l'utilisation des boucles "for" "onenterFrame" etc ... voir meme a ne pas y recourir.



Comme je l'ai précedement dit sur l autre post, j'aimerais avoir une
explication du raisonnement, et de la méthode et pas forcemment un code
déjà tout parametrer ( sinon je comprendrais jamais et je ne saurais
pas l adapter a mes besoins )



Si quelqu un sait eclairer ma lanterne, qu il puisse me faire voir la lumiere



Merci d avance



Darkrats

3 réponses

Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
1
Re bonjour à tous



Bhein ici, j'ai trouvé une solution ( j'ai enfin réussi a parametrer
donc il est possible que ca bug encore, mais au pire si c est le cas ca
n en restera pas moins une piste pour ceux que ca interesse )

La solution est pas géniale géniale, vu que je suis obligé d'utiliser une boucle mais elle a le mérite de fonctionner.



Donc pour ceux que ca interesse voici la bidouille ( je le répète, je
sais pas ce qu'elle vaut donc si d'autres ont aussi des suggestions,
qu'ils ne se privent pas )



( dans mon cas, j'utilise un bouton mis en arriere plan qui supportera tous les clic : bouton_clip_fond )



tab_clip = new Array;



Pour la création du clip dynamique à l'endroit du clic de la souris

bouton_clip_fond.onRelease = function(){

info_objet = clip_vide.attachMovie("clip_origine", "clip_dynamique"+ma_variable,ma_variable);

// Je crée mon clip dynamique dans un clip vide afin d'éviter les problème de profondeur.

// Il faut concaténer la variable au préalable pour qu'ils puissent en créer indéfiniment

info_objet._x = _root._xmouse;

info_objet._y = _root._ymouse;

// Je repositionne mon clip généré à l'endroit où c'est effectué le clic

tab_clip[ma_variable] = info_objet;

// Je met les références de mon clip dans un tableau, ce qui me permettra de faire appel à ce clip lors de code action script

// L'idee du tableau n'est pas de moi, je l'ai trouvée sur :
media-box.net ( http://flash.media-box.net/index.php?showtopic=150 )

}



Pour la détection du clip sur lequel on a cliqué

bouton_clip_fond.onRelease = function(){

for( var i; i<= ma_variable; i++){


if((_root._xmouse==(tab_clip[ma_variable]._x)) &&
(_root._ymouse==(tab_clip[ma_variable]._y)){

// mettez ici vos fonctions qui doivent se jouer si on a cliqué sur le bon clip

break;

}

}

}



Le break arrêtera la boucle dés que la condition a été remplie.
Dans mon cas, il n'y aura jamais qu'un seul clip qui remplira cette
condition donc ca me convient.

Si aucun clip ne correspond, la boucle s'arretera d'elle meme de toute facon.

Si vous faites un trace() avec le nom du clip -> trace(tab_clip[ma_variable]._name) vous obtiendrez le nom de votre clip.



Voila j espere que ca pourra aider quelqu un ...



Si vous voyez des erreurs de code ou une maniere de l'optimiser, n'hesitez pas ...

Vais pet etre envisagé de poster une source ... ca peut tjs servir ...
enfin je testerai ca plus en profondeur afin de voir si ca bug pas.



Voila merci a tous ( vos sources, tuto ou meme post m ont tjs bcp aidé et bcp inspiré )



Darkrats
Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
1
J'ai trouvé dix fois plus simple ... me demande meme comment j'ai fait pour autant me prendre la tete pour rien.



Si on a un clip qui contient un bouton, suffit de mettre le code dans le clip :

bouton.onRelease = function(){

trace(this._parent._name);

}



Et vous aurez le nom du bouton, apres vous en faite ce que vous voulez ...



Comment ai je pu etre si bete ^^



Darkrats
Messages postés
212
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
12 mai 2008
1
Bon, je continue a patauger severe ...



Je developpe plus encore mon projet parce que si ca se trouve il y a une autre astuce pour s en sortir



Alors pour mon projet je dois permettre a l utilisateur de disposer ou bon lui semble et en quantité indéfinie des clips

Pour ca, j'ai utilisé la fonction attachMovie comme je l avais precedemment dit.

En plus de ca, je dois permettre de relier par des "cables" ( des
tuyau, j ai un clip contenant un bout de tuyaux droit et un coin pour
pouvoir etirer mon tuyaux comme bon me semble en etirant le tuyaux
droit ( ._heigth ou ._width ) )

Les tuyaux ne peuvent etre place que sur un clip precedemment mis.



Pour le moment j arrive a placer le tuyaux sur un clip mais c tjs sur le dernier creer que vient ce mettre le tuyaux.



Pour creer mes clip voici le code :



zone_ou_on_peut_poser_un_clip.onPress = function(){

info_objet =
clip_cible.attachMovie("nom_liaison",
"nom_clip"+variable_concatenation,variable_concatenation);

// Je concatene a chaque fois le nom du clip afin
de pouvoir en creer indefiniment, de meme pour la profondeur, j'entasse
tous mes clips dans un clip_cible. Ca me permet de ne pas avoir de
surprise avec les profondeurs, et de pouvoir facilement tt
remettre a zero si besoin est

info_objet._width = 33.9;

info_objet._height = 73;

// Je redimensionne mon clip

info_objet._x = _root._xmouse;

info_objet._y = _root._ymouse;

// Je positionne mon clip là où on a cliqué dans la zone

}



Maintenant je dois faire en sorte que si on clique avec le tuyaux,
celui ci ne peut s afficher que si on a clique sur un clip ( et pas
dans le vide ). De meme une fois qu on a cliqué avec le tuyaux sur un
clip, celui ci prend les coordonnees x et y du clip en question. Une
fois positionne, il doit s etirer et on doit aller cliquer sur un autre
clip pour l arreter.



Alors comment puis je lui determiner sur quel clip on a cliqué ?

J'ai essaye en mettant le code directement dans le clip pour la
detection du bouton, mais je n arrive tt de meme pas a avoir son nom.



bouton_du_clip.onRelease = function(){


if(type_icone=="cable"){


info_objet = _parent._parent.objet_cable.attachMovie("liaison_cable", "cable"+variable_cable,variable_cable);

// Le code se trouvant dans le clip en question,
lui meme dans le clip cible. et le cable etant dans un autre clip cible
mis au meme niveau, ca explique les "_parent" ... je prefere garder des
chemins relatifs car le fichier va etre load dans un autre par apres,
et les hierarchie changeront peut etre


info_objet._x = _parent["nom_clip"+_parent._parent.variable_concatenation]._x;


info_objet._y = _parent["nom_clip"+_parent._parent.variable_concatenation._y;

// Ici j essaye de reprendre le nom du clip dans
le quel je me trouve, mais comme la variable_concatenation est
augmentée de 1 a chaque nouveau clip crée, si j'en crée deux, et que je
clique sur le premier, il ne me donnera le nom que du second :
nom_clip2 et pas nom_clip1 comme je le voudrais


}


}






Quelqu'un a t il une solution pour moi ? Ca urge un peu ... je dois
avoir fini ca et d autre truc pour fin du mois ... et bon, ca commence
a faire juste.



Si quelqu'un peut m expliquer comme recuperer les noms de clip généré dynamiquement, je l'en remercierai jamais assez



Merci d avance pour tt ceux qui essayeront et se creuseront avec moi les meninges



Darkrats