La aplicacion que estoy desarrollando consta de varios swf's que se van cargando a nivel de _root. Cada uno de los swf tiene un menuBar con las opciones que se cargan desde un XML.
Estoy intentando hacer un sistema generico que llame a una funcion que carge el menubar con las opciones adecuadas a cada caso, el problema es que la primera vez que hago la llamada funciona todo sin problemas, pero las ocasiones siguientes no recibo los eventos de los subitems del menu cuando hago click en una opcion.
(más curioso, sí recibo los eventos si hago click en la opcion del menu (la que despliega) y sin soltar el boton bajo hasta el subitem correspondiente y suelto el boton sobre el)
El codigo que utilizo es el siguiente:
(En el swf que hace la llamada)
ficheroMenu = "mnuSecciones";
cargarMenu("mnuSecciones");
esta funcion esta en un .as externo que tengo con #include
function cargarMenu(cual){
_root.createEmptyMovieClip("elMenu",10000);
_root.elMenu.loadMovie("barraMenu.swf","POST");
_root.elMenu._x = 0;
_root.elMenu._y = 0;
// Esto es para esperar a que barraMenu esté cargardo por completo
this.onEnterFrame = function() {
if (_root.elMenu.getBytesLoaded() != 0 && _root.elMenu.getBytesLoaded() == _root.elMenu.getBytesTotal()) {
_root.ficheroMenu = cual;
delete this.onEnterFrame;
}
};
}
barraMenu.swf contiene un menubar en el escenario y el siguiente codigo:
var menuXML:XML = new XML();
menuXML.ignoreWhite = true;
menuXML.onLoad = function(exito){
if(exito){
var alCambiar:Object = new Object();
alCambiar.change = function(evento){
var menu = evento.menu;
var item = evento.menuItem;
trace(item.attributes.accion);
if(item.attributes.accion=="salir"){
// Con esto vuelvo a cargar el clip principal que llama a esta pelicula
cargarPelicula("Citas");
}else{
cargarPelicula(item.attributes.accion);
}
}
for(i=0;i<menuXML.childNodes.length;i++){
// Coger el nombre del menu
barramenu["menu"+i] = barramenu.addMenu(menuXML.childNodes[i].attributes["label"]);
for(j=0;j<menuXML.childNodes[i].childNodes.length;j++){
if(menuXML.childNodes[i].childNodes[j].attributes["type"] == ""){
itemMenu = barramenu["menu"+i].addMenuItem({label:menuXML.childNodes[i].childNodes[j].attributes["label"],
instanceName:menuXML.childNodes[i].childNodes[j].attributes["instanceName"],
accion:menuXML.childNodes[i].childNodes[j].attributes["accion"]});
}else{
barramenu["menu"+i].addMenuItem({type:"separator"});
}
} // for j
barramenu["menu"+i].addEventListener("change", alCambiar);
} // for i
} // if(exito)
} // function
// La variable ficheroMenu la establezco desde la funcion que llama a esta pelicula
menuXML.load(_root.ficheroMenu+".xml");
la funcion cargarPelicula esta un .as externo que cargo con un #include y su codigo es este
function cargarPelicula(cual){
_root.createEmptyMovieClip("Cierre",5000);
_root.Cierre.loadMovie("cerrarPelicula.swf","POST");
_root.Cierre._x = 0;
_root.Cierre._y = 0;
// Esto es para esperar a que cerraPelicula esté cargardo por completo
this.onEnterFrame = function() {
if (_root.Cierre.getBytesLoaded() != 0 && _root.Cierre.getBytesLoaded() == _root.Cierre.getBytesTotal()) {
_root.Cierre.cargar = cual;
delete this.onEnterFrame;
}
};
}
cerrarPelicula.swf hace un efecto de cortina de cierre y cuando finaliza ejecuta el siguiente codigo:
delete _root.barramenu.alCambiar;
mcMenu=_root.getInstanceAtDepth(10000);
mcMenu.unloadMovie();
_root.unloadMovie();
_root.loadMovie(this._parent._parent.cargar+".swf");
Perdón por el ladrillo de código y gracias por vuesta ayuda.
