Appel de clip

Résolu
Signaler
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015
-
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
-
Bonjour,

je développe mon premier site en as3, j'ai réussi à faire un menu déroulant sans trop de problème mais là je bloque sur une chose :

j'aimerai bien savoir comment on fait en as3 pour pouvoir appeler un clip ou un sprite.

Par exemple :

je mets 2 clips dans ma bobliothèque et veux que quand je clique sur un bouton, que ça enlève le clip fenetre situé en face

for (var i=0; i<3; i++){
var bouton:clip1=new clip1();
bouton.x=10;
bouton.y=10+100*i;
bouton.name="bouton"+i;
addChild(bouton);
bouton.addEventListener(MouseEvent.CLICK, supprimer);

var fenetre:clip2=new clip2();
fenetre.x=300;
fenetre.y=10+30*i;
fenetre.name="fenetre"+i;
addChild(fenetre);

}


function supprimer(evt:MouseEvent){
evt.currentTarget.x+=10;
//suppression du clip en face?
}

Merci!

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice

10 réponses

Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Oui, j'ai eu la même réflexion que toi, et je n'ai pas encore trouvé de solution à ce problème.
Ou tout du moins, je le contourne.
Par exemple, une fois mon xml importé, je récupère le nombre de noeud :
var nbreDeNeuPerso:XMLList = persoXML.children();
nbrePerso=nbreDeNeuPerso.length();// renvoie le nombre de référence total


Ensuite, je fais une boucle qui me permet de ranger ce dont j'ai besoin dans un tableau qui est défini vide par avance :
public var listeCd : Array = new Array();

Puis dans ma fonction qui traite le xml
for (var m : int = 0; m < nbreCd ; m++) {
var ind4 : int = m+1;
//trace("----------- >> creaMenuRef  ::  cdXML.children().titre = \n"+cdXML.children().titre);
listeCd[m]={nom:target4.(@identifiant=="refCd"+[ind4]).titre,image:target4.(@identifiant=="refCd"+[ind4]).img,chapeau:target4.(@identifiant=="refCd"+[ind4]).soustitre,letexte:target4.(@identifiant=="refCd"+[ind4]).txt,lelien:target4.(@identifiant=="refCd"+[ind4]).lien};
}


Je sais que cela ne répond pas vraiment à ton besoin, mais peut-être que cela te donnera une piste pour traiter ton problème.
Par exemple :
var listeCd : Array = new Array();
for (var i : int = 0; i < 3 ; i++) {
 	listeCd[i] = new Fenetre();
 	trace("listeCd["+i+"] = "+listeCd[i]);
addChild(listeCd[i]);
listeCd[i].y = i*80;
listeCd[i].x = 10
}

Il suffit alors de remplacer la borne de la boucle par nbreCd (qui est le nombre de noeud) et le tour est joué.

Fait une anim avec un clip (un carré de 70 sur 70 par exemple )dans la bibli qui est exporté sous le nom de Fenetre et place le code ci-dessus sur ta première image clé, tu auras trois clip qui s'afficherons les uns en dessous des autres.
Tiens moi au courant.

Tout vient à qui sait attendre
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015

Nickel, ça marche! Quelle histoire quand même!!! Moi qui pensait que l'as3 simplifierai un peu les choses, pour le coup, c'est raté^^

Pour le tester, j'ai repris ton code et rajouté un bouton qui bouge aléatoirement un des 3 clips. Je le mets là, ça epu servir à d'autres personnes peut être qui auront le même problème :

var listeCd : Array = new Array();
for (var i : int = 0; i < 3 ; i++) {
listeCd[i] = new Fenetre();
trace("listeCd["+i+"] = "+listeCd[i]);
addChild(listeCd[i]);
listeCd[i].y = i*80;
listeCd[i].x = 10
}

bouton.addEventListener(MouseEvent.CLICK,disparition);

function disparition(evt:MouseEvent){
var hasard:int = Math.random()*3;
listeCd[hasard].x+=10
}


--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Bonjour,
pour supprimer un clip, je pense que removeChild(leclip) devrait suffire, ou leclipPorteur.removeChild(leclip) si le clip a été placé dans un clip dont le nom est leclipPorteur.
Pour faire apparaître un clip dans la bibliothèque, il faut d'abord dans les propriétés le déclarer. Donc tu fais un clic droit sur ton clip dans la bibliothèque et tu coche exporter l'animation.
Ensuite, tu déclares ton clip par AS :

var nomDeLOccurence : NomduClipDansLabibli = new NomduClipDansLabibli();
(par exemple si ton clip dans la bibli s'appelle MonClip, le plus simple est de faire : var monClip : MonClip = new MonClip())

Ensuite, quand tu en a besoin tu fais apparaître ton clip avec addChild(monClip).

Pour la disparition tu peux aussi utiliser monClip.visible = false;
Voilà, j'espère que cela t'aidera.




Tout vient à qui sait attendre
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015

Merci pour ta réponse Inaden mais ce n'est pas ce que je demandais:)
Mais je me suis pas très bien exprimé je pense sur ce que je veux faire.

Ce que je n'arrive pas à faire, c'est quand on créé un clic dynamiquement à l'aide d'une boucle for, comment on peut agir sur les propriétés de ce clip en cliquant sur un autre?


Reprenons mon exemple plus haut, en fait je veux faire bouger le clip fenetre qui a pour nom fenetre0 en cliquant sur bouton0.

function supprimer(evt:MouseEvent){
evt.currentTarget.x+=10;// on bouge le bouton sur lequel on clique

fenetre0.x+=10;//donne une erreur
fenetre.x+=10;//fait bouger le 3° clip (fenetre2) et non le premier.
}

Merci encore

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Il faudrait savoir comment tu définis tes clips. C'est surement là que réside le hic.
Donne nous le code de ta boucle.

Tout vient à qui sait attendre
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015

Il est dans le premier post :)

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Désolé, je viens de me lever !
Essaie peut-être de mettre tes clips dans un tableau :
var fenetre0:clip2=new clip2();
var fenetre1:clip2=new clip2();
var fenetre2:clip2=new clip2();
public var mesClips : Array = new Array (fenetre0,fenetre1,fenetre2);

Et pour faire bouger tes clip tu passe par ton tableau :
mesClips[i].x + = 10;


Tout vient à qui sait attendre
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015

Pas mal comme possibilité le tableau mais ce qui me pose problème en fait c'est une déclaration dynamique de clip.


Admettons que j'importe un XML et que je dois créer un nombre de clips en fonction du nombre de nœuds.
En as2.0, on pouvait écrire :

eval("fenetre"+i):clip2= new clip2() //ou avec this...

or il me semble qu'on ne puisse pas le faire en as3 (j'ai des messages d'erreur à chaque fois) et à ce moment là, ça me pose un problème pour appeler ces clips quand l'action vient d'un autre clip (exemple cliquer sur clip 1 pour supprimer un de ses clips créé dynamiquement.

Merci pour tes réponses en tout cas

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
Messages postés
112
Date d'inscription
lundi 6 avril 2009
Statut
Membre
Dernière intervention
17 janvier 2015

Oups j'ai oublié, merci encore et encore pour ton aide :)

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
De rien, content que tu t'en sois sorti.


Tout vient à qui sait attendre