acces a un champs texte d'un bouton [Actionscript & XML] - Flash/ActionScript - Programmation
Marsh Posté le 25-11-2008 à 14:45:20
Donne nous ta scene zippé plutôt.
Si AS2, retrouve tu la valeur des textes dans le débuggueur ?
Marsh Posté le 25-11-2008 à 14:48:56
tu l'as toi même mis en gras !
Code :
|
ne serait ce pas plutot
this["menu"+i].menu_txt.htmlText = xmlObj[i].title;
Marsh Posté le 25-11-2008 à 15:01:02
Si désolée mais c'est a cause de la mise en italique automatique du champs de rédaction des messages...
je vous le remets ici en espérant cette fois me mon [i ] ne soit pas transformé.... j'ajoute un espace en espérant que ça suffira....
var XMLMenu:MenuXML = new MenuXML("website-menu.xml", this);
/* Fonction loadMenu : get the content of the menu from the tab created by onLoad() and print the result */
function loadMenu(xmlObj:Array) {
var menuItemNb:Number = xmlObj.length;
var itemX:Number = 101;
var itemY:Number = 530;
var widthLine:Number = 160; // width of the button
for (var i=0; i < menuItemNb; i ++){
this.attachMovie("MenuItem", "menu"+i, i); // call the button from the librairy called "MenuItem"
this["menu"+i]._x = itemX; // positionning X
this["menu"+i]._y = itemY; // positionning Y
this["menu"+i].menu_txt.htmlText = xmlObj[i ].title; // add the texte of the button in the textzone of the button called "menu_txt"
this["menu"+i].link = xmlObj[i ].link; // save the link to do the onRelease action
this["menu"+i].onRelease = function(){}
itemX += widthLine; // define the X position of the next menu item
/* TEST */
trace("this[menu"+i+"]._x :"+this["menu"+i]._x);
trace("xmlObj["+i+"].title :"+xmlObj[i ].title);
trace("this[menu"+i+"].menu_txt.htmlText :"+this["menu"+i].menu_txt.htmlText);
}
}
Marsh Posté le 25-11-2008 à 15:25:32
Yohh vous savez quoi ? j'ai trouvé une solution !
Il semblerait que Flash pose problème lorsqu'un champ texte fait partie d'un bouton mais que cela fonctionne a merveille avec un movieClip !
Donc j'ai juste modifier dans la bibliothèque le type et voila le tour est joué !
Je me disais bien que logiquement la syntaxe me semblait correcte
Merci quand mm a ceux qui ont pris la peine de me répondre
Bonne journée !
(et vivement le week-end quand même non? )
Marsh Posté le 25-11-2008 à 16:14:37
bon à savoir, AS2 donc je présume ^^
Marsh Posté le 25-11-2008 à 17:29:53
oui, on est pas encore passé a as3 ici.... trop petit structure je suppose.
enfin voila c'était la bonne nouvelle de l'après-midi
Marsh Posté le 25-11-2008 à 14:00:32
Bonjour tout le monde !
Je réalise actuellement mon premier site en Flash / XML et j'aurais besoin de vos lumières...
En vue de générer un menu a partir de mon fichier XML, j'ai créé un bouton "MenuItem" comprenant un rectangle et un champs de texte dynamique nommé "menu_txt".
A l'aide de mon script je parvient actuellement a créer et positionner les différents boutons composant mon menu mais je ne parvient pas a définir le contenu de mon champs texte pour chacun d'eux.
Je vous joins ci-dessous les différentes pièces vous permettant de jeter un oeil a mon travail et, je l'espere, de m'aider a resoudre ce probleme.
Fichier XML du menu :
{les links me serviront plus tard pour appeler une fonction changeant le contenu affiché}
<menu>
<item link='about_us'>About Us</item>
<item link='mortgages'>Mortgages</item>
<item link='overseas_buyers'>Overseas buyers</item>
<item link='residential_reversions'>Reversions</item>
<item link='wealth_management'>Wealth Management</item>
<item link='contact_us'>Contact us</item>
</menu>
Fichier externe AS définissant ma classe MenuXML :
/* Création d'une classe héritant du ficher XML du menu */
/* OK : Fonctionne */
class MenuXML extends XML{
public var menuItems:Array;
public var parent:Object;
public function MenuXML (fileXML:String, target:MovieClip){
super();
this.ignoreWhite = true;
this.parent = target;
this.menuItems = new Array();
this.load(fileXML);
}
public function onLoad(ok:Boolean){
if(ok){
var listRoot:Object = this.childNodes;
var listItem:Object = listRoot[0].childNodes;
var listItemNb:Number = listItem.length;
for (var i=0; i < listItemNb; i ++){
var itemObj:Object = {};
itemObj.title = listItem.firstChild.nodeValue;
itemObj.link = listItem[i].attributes.link;
this.menuItems.push(itemObj);
}
this.parent.loadMenu(this.menuItems);
}
else{
trace("LOADING ERROR : Menu" );
}
}
}
[i]Script interne présent sur l'image clé 1 de mon calque action :
var XMLMenu:MenuXML = new MenuXML("website-menu.xml", this);
/* Fonction de publication du menu */
function loadMenu(xmlObj:Array) {
var menuItemNb:Number = xmlObj.length;
var itemX:Number = 101;
var itemY:Number = 530;
var largeurLigne:Number = 109;
for (var i=0; i < menuItemNb; i ++){
this.attachMovie("MenuItem", "menu"+i, i);
this["menu"+i]._x = itemX;
this["menu"+i]._y = itemY;
this["menu"+i].menu_txt.htmlText = xmlObj.title;
this["menu"+i].link = xmlObj[i].link;
this["menu"+i].onRelease = function(){}
trace("xmlObj["+i+"]]._x :"+this["menu"+i]._x);
trace("xmlObj["+i+"]].title :"+xmlObj[i].title);
trace("this[menu"+i+"].menu_txt.htmlText :"+this["menu"+i].menu_txt.htmlText);
itemX += largeurLigne;
}
}
[i]Résultat des "trace( )" :
xmlObj[0]]._x :101
xmlObj[0]].title :About Us
this[menu0].menu_txt.htmlText :undefined
xmlObj[1]]._x :210
xmlObj[1]].title :Mortgages
this[menu1].menu_txt.htmlText :undefined
xmlObj[2]]._x :319
xmlObj[2]].title verseas buyers
this[menu2].menu_txt.htmlText :undefined
xmlObj[3]]._x :428
xmlObj[3]].title :Reversions
this[menu3].menu_txt.htmlText :undefined
xmlObj[4]]._x :537
xmlObj[4]].title :Wealth Management
this[menu4].menu_txt.htmlText :undefined
xmlObj[5]]._x :646
xmlObj[5]].title :Contact us
this[menu5].menu_txt.htmlText :undefined
Mes boutons sont correctement créés et positionnés mais leur champ texte est vide.
Je songe peut-être a une erreur de ciblage mais j'avoue être en panne de solutions.
J'espère que vos réponses me permettront d'y voir plus clair.
Merci d'avance