Menu dynamique + tween

Résolu
Ariranha Messages postés 79 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 27 juillet 2011 - 24 oct. 2009 à 20:40
Ariranha Messages postés 79 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 27 juillet 2011 - 24 oct. 2009 à 23:04
Bonsoir

Je suis sur un menu dynamique xml avec : menu (bien entendu), sousMenu et sousSousMenu (et oui le client n'a pas étudié son arborescence et veut en montrer de trop mais rien a faire pour le convaincre du contraire).

Or j'ai un petit soucis avec les tweens, que je souhaiterai placer sur l'apparition du sousMenu et du sousSousMenu. Je vous montre le code ci-dessous :
import com.greensock.*;
import com.greensock.easing.*;

generationMenu = function (container, name, x, y, depth, noeudXml) {
var noeudCourant;
var itemCourant;
var menuCourant = container.createEmptyMovieClip(name, depth);
for (var i = 0; i<noeudXml.childNodes.length; i++) {
itemCourant = menuCourant.attachMovie("menuitem", "item"+i+"_mc", i);
itemCourant._x = x+i*itemCourant._width;
itemCourant._y = y;
itemCourant.trackAsMenu = true;
noeudCourant = noeudXml.childNodes[i];
itemCourant.chemin = noeudCourant.attributes.chemin;
itemCourant.name.text = noeudCourant.attributes.name;
itemCourant.legende = noeudCourant.attributes.legende;
if (noeudXml.childNodes[i].nodeName == "menu") {
itemCourant.noeudXml = noeudCourant;
itemCourant.onPress = function() {
var x = 10;
var y = this._y+25;
generationMenu(menuCourant,"sousMenu",x,y,1000,this.noeudXml);			
};
} else {
itemCourant.arrow._visible = false;
itemCourant.onPress = function() {
menuCourant.sousMenu.removeMovieClip();
};
}
itemCourant.onRelease = function() {
if (this.legende == null) {
legende.text = "";
} else {
loadMovie(this.chemin, box);
legende.text = this.legende;
MovieClipLoader
}
};
}
};

creationMenuPrincipal = function (x, y, depth, menu_xml) {
generationMenu(this,"menuPrincipal",x,y,depth,menu_xml.firstChild);
menuPrincipal.onMouseUp = function() {
if (menuPrincipal.sousMenu && !menuPrincipal.hitTest(_root._xmouse, _root._ymouse, true)) {
}
};
};

menu_xml = new XML();
menu_xml.ignoreWhite = true;
menu_xml.onLoad = function(sucess) {
if (sucess) {
creationMenuPrincipal(10,10,0,this);
legende.text = "zone legende";
} else {
legende.text = "erreur:  impossible d'acceder au xml";
}
};
menu_xml.load("menu.xml");


Donc en gros il faudrait que je puisse mettre une tween dans les lignes ci-dessous, mais je ne vois pas comment m'y prendre : créer une variable qui engloberait l'ensemble du sousMenu ou du sousSousMenu et par la suite appliquer la tween a cette variable ?

if (noeudXml.childNodes[i].nodeName == "menu") {
itemCourant.noeudXml = noeudCourant;
itemCourant.onPress = function() {
var x = 10;
var y = this._y+25;
generationMenu(menuCourant,"sousMenu",x,y,1000,this.noeudXml);			
};


Merci

2 réponses

Ariranha Messages postés 79 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 27 juillet 2011
24 oct. 2009 à 23:04
Je suis désolé de re-poster encore mais ça y est j'ai enfin réussi à obtenir l'effet désiré par le client, pour le code il s'agissait seulement d'un problème de placement des "lignes". Donc voici le code :
if (noeudXml.childNodes[i].nodeName == "menu") {
itemCourant.noeudXml = noeudCourant;
container.sousMenu._alpha = 0;
TweenLite.to(container.sousMenu, 1, {_x:-90, _alpha:100});
itemCourant.onPress = function() {
var x = 100;
var y = this._y+25;
generationMenu(menuCourant,"sousMenu",x,y,1000,this.noeudXml);	
container.sousMenu.sousMenu._x = 100;
container.sousMenu.sousMenu._alpha = 0;
TweenLite.to(container.sousMenu.sousMenu, 1, {_x:0, _alpha:100});
};
3
Ariranha Messages postés 79 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 27 juillet 2011
24 oct. 2009 à 22:59
Apres quelques modifications, j'ai bien avancé mais il y a un truc qui m'échappe. Voici la partie du code modifiée :
if (noeudXml.childNodes[i].nodeName == "menu") {
itemCourant.noeudXml = noeudCourant;
container.sousMenu._alpha = 0;
TweenLite.to(container.sousMenu, 1, {_x:-90, _alpha:100});
TweenLite.to(container.sousMenu.sousMenu, 1, {_x:-90, _alpha:100});
itemCourant.onPress = function() {
var x = 100;
var y = this._y+25;
generationMenu(menuCourant,"sousMenu",x,y,1000,this.noeudXml);	
};


J'ai toujours un problème avec container.sousMenu.sousMenu qui au lieu de partir de 100 et de parcourir -90 sur le _x comme container.sousMenu, il part de 0 et va a -90.

Si quelqu'un peut m'expliquer j'en serais ravi.
0
Rejoignez-nous