Tengo un problema con este menú que se genera dinámicamente leyendo de un XML. Todos los botones salen bien pero el enlace los sub-botones no funciona del todo bien, aunque si carga bien los textos.
Si desplegamos el "Topic One" y pulsamos en los botones no cargan los swf a los que llamo, pero si pulsamos en el "Topic Two" y luego en los botones del primero, entonces si cargan los swf pero no correctamente. He colocado un trace tanto fuera como dentro de la función (lineas 85 y 91) y devuelven indices que no se corresponden con los botones. Parece que, al asignar los botones, usa el último valor de J. No se como arreglar esto para que cada botón pille el link que le coresponde
La instrucciones para asignar entre las líneas 85 y 95. Pongo aquí el código y adjunto los archivos.
[url=http://dl.dropbox.com/u/3606883/menuxml.zip][/url]
Muchísimas gracias por la ayuda
Código ActionScript :
var test:Number = 56; var mainTab:Array = new Array(); var subTabArr:Array = new Array(); var subTabEnla:Array = new Array(); var total:Number = 0; var menuXml:XML = new XML(); menuXml.ignoreWhite = true; mask_clip._visible=0 function xmlLoaded(sucess) { init(); if (sucess) { var rootNode = this.firstChild; total = rootNode.childNodes.length; var count:Number = 0; var subcount:Number = 0; for (thisNode=rootNode.firstChild; thisNode != null; thisNode=thisNode.nextSibling) { mainTab[count] = thisNode.attributes.label; subcount = 0; subTabArr[count] = new Array(); subTabEnla[count] = new Array(); for (subNode=thisNode.firstChild; subNode != null; subNode=subNode.nextSibling) { subTabArr[count][subcount] = subNode.attributes.label; subTabEnla[count][subcount] = subNode.attributes.link; // trace ("nombre " + subTabArr[count][subcount]); //trace ("enlace " + subTabEnla[count][subcount]); subcount++; } count++; } createTabMenu(); } else { trace("Failed to load Xml"); } } menuXml.onLoad = xmlLoaded; menuXml.load("scroll.xml"); function createTabMenu(){ _root.Scroll_visible(false); this.createEmptyMovieClip("menuTab",10); menuTab.setMask(_root.mask_clip) menuTab._x = 20; x=menuTab._y = 50; for(i=0; i<total; i++){ var tab = menuTab.attachMovie("mainTab","mainTab"+i,i,{_y:i*28}); trace("TAB: "+tab); tab.label_txt.text = mainTab[i]; tab.a=i; tab.open = false; tab.over_btn.onRelease = function() { trace ("Main tab pulsado"); if(menuTab._height<=mask_clip._height) { menuTab._y=x _root.ScrollBar._visible=0 } else { _root.ScrollBar._visible=1 } } tab.over_btn.onPress = function() { ScrollBar.targetMc=menuTab var currNum = this._parent.a; if(this._parent.open==false){ this._parent.open=true; for(j=0;j<subTabArr[currNum].length;j++){ var subTab = this._parent.attachMovie("subTab","subTab"+j,j,{_y:j*28+28}); //trace (subTab); // _level0.menuTab.mainTab6.subTab0.semaforo.gotoAndStop(2); subTab.label_txt.text = subTabArr[currNum][j]; //trace ("subTabArr[currNum][j] " + subTabArr[currNum][j]); trace ("Out: ["+currNum+"]["+j+"]" + subTabEnla[currNum][j]); subTab.over_btn.onRelease = function() { //trace("el boton es: " + subTab.over_btn); //trace ("test dentro " + test); trace ("In: ["+currNum+"]["+j+"] " + subTabEnla[currNum][j]); loadMovieNum(subTabEnla[currNum][j],1); //trace ("sub tab pulsado"); } } for(k=currNum+1; k<total; k++){ menuTab["mainTab"+k]._y=menuTab["mainTab"+(k-1)]._y+menuTab["mainTab"+(k-1)]._height; } if(menuTab._height<=mask_clip._height) { _root.Scroll_visible(false); menuTab._y=x }else{ _root.Scroll_visible(true); } } else { this._parent.open=false; for(j=0;j<subTabArr[currNum].length;j++){ removeMovieClip(menuTab["mainTab"+currNum]["subTab"+j]); } for(k=currNum+1; k<total; k++){ menuTab["mainTab"+k]._y=menuTab["mainTab"+(k-1)]._y+menuTab["mainTab"+(k-1)]._height; if(menuTab._height<=mask_clip._height) { _root.Scroll_visible(false); menuTab._y=x }else{ _root.Scroll_visible(true); } } } } } } //---------------------------------------------------------------------- mx.events.EventDispatcher.initialize(this); var _nInterval:Number; var _nOffset:Number; var dispatchEvent:Function; stab.onPress = function():Void { _nOffset = this._ymouse; _nInterval = setInterval(scroll, 10); }; stab.onRelease = function():Void { clearInterval(this._parent._nInterval); }; stab.onReleaseOutside = stab.onRelease; up.onPress = function():Void { this._parent._nInterval = setInterval(nudge, 10,-1); }; up.onRelease = function():Void { clearInterval(_nInterval); }; up.onReleaseOutside = up.onRelease; down.onPress = function():Void { this._parent._nInterval = setInterval(nudge, 10,1); }; down.onRelease = function():Void { clearInterval(_nInterval); }; down.onReleaseOutside = down.onRelease; function arrange():Void { if(stab._y<sbar._y) { stab._y=sbar._y } if(stab._y>(sbar._y+sbar._height-stab._height)) { stab._y=sbar._y+sbar._height-stab._height } stab._y=sbar._y } var initContentPos:Number =0 var moveVal:Number=0; function scroll():Void { var nY:Number = _ymouse - _nOffset; var nUpper:Number = sbar._y; var nLower:Number = down._y - stab._height; if(nY > nUpper && nY < nLower) { stab._y = _ymouse -_nOffset; } else if(nY < nUpper) { stab._y = nUpper; } else if(nY > nLower) { stab._y = nLower; } dispatchScrollEvent(); updateAfterEvent(); } function nudge(nIncrement:Number):Void { var nUpper:Number = sbar._y; var nLower:Number = down._y - stab._height; stab._y += nIncrement; if(stab._y < nUpper) { stab._y = nUpper; } else if(stab._y > nLower) { stab._y = nLower; } dispatchScrollEvent(); updateAfterEvent() } function dispatchScrollEvent():Void { moveVal= (menuTab._height-300)/(sbar._height-stab._height); menuTab._y = Math.round((sbar._y-stab._y)*moveVal+50); } function Scroll_visible(flag) { sbar._visible=flag; stab._visible=flag; up._visible=flag; down._visible=flag; } // Scroll_visible(true);