Flash y XML...problema
a ver, que yo solito me meto en cada lio....
estoy enredando con flash y XML...
tengo el siguiente XML
<code><menu nombre="portada" link="portada.asp">
<submenu nombre="portada_boton01" link="subportada.asp"></submenu>
<submenu nombre="portada_boton02" link="subportada.asp"></submenu>
<submenu nombre="portada_boton03" link="subportada.asp"></submenu>
</menu>
<menu nombre="tutoriales" link="portada.asp">
<submenu nombre="tutoriales_boton01" link="subportada.asp"></submenu>
<submenu nombre="tutoriales_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="noticias" link="portada.asp">
<submenu nombre="noticias_boton01" link="subportada.asp"></submenu>
<submenu nombre="noticias_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="links" link="portada.asp">
<submenu nombre="links_boton01" link="subportada.asp"></submenu>
</menu></code>
y con este código construyo un menú:
<code>// carga XML
menu = new XML();
menu.load("menu.xml");
// menu.load("menu.xml");//ruta local
menu.onLoad = interprete;
menu.ignoreWhite = true;
// -----------
prof = 1;
// -----------
function go(){
//trace("2");
}
function interprete() {
menuArray = menu.childNodes;
//trace (menu.childNodes);
y = 20;
x = 70;
//xsubmenu = 200;
for (i=0; i<menuArray.length; i++) {
//trace ("*" + menuArray[i].attributes.nombre);
attachMovie("boton_principal", "boton_principal"+[i], prof++);
_root["boton_principal"+[i]]._x = x;
_root["boton_principal"+[i]]._y = y;
_root["boton_principal"+[i]].texto = menuArray[i].attributes.nombre;
_root["boton_principal"+[i]].queindex = i;
y += 16;
//submenuArray = menu.firstChild.childNodes;
submenuArray = menuArray[i].childNodes
submenuArray.ignoreWhite = true;
//este es para los submenus ****************************
trace (menuArray[i].childNodes);
for (o=0; o<menuArray[i].childNodes.length; o++){
attachMovie("subboton", "subboton"+[o], prof++);
_root["subboton"+[o]]._x = x;
_root["subboton"+[o]]._y = y;
_root["subboton"+[o]].texto = submenuArray[o].attributes.nombre;
trace(submenuArray[o].attributes.nombre);
y += 16;
}
}
}
stop();
</code>
no me funciona bien... me lee todos los valores, pero cuando tiene que hacer el attachMovie de los submenus, me devuelve sólo el último nodo (se llama así no?) y sólo coloca el ultimo de cada submenú.
PLEASE HELP!!!!!
y de paso, algún tutorial de XML y flash imprescindible?
playground
Yo creo que el problema lo tienes en el archivo XMl que lo toma como si fuera tres. Prueba a dejar solo los datos del primer menu y sus submenus y vera como sí funciona. Supongo que tendras que hacer el XML de otra forma.
black
por favor.... no lo entiendo...
he puesto dos mil traces... para comprobar si todo lo que me devuelve está bien.... me devuelve todo bien... con posiciones correctas y con valores correctos...
pero no me hace bien el attachmovie. Este...
<code> for (o=0; o<menuArray[i].childNodes.length; o++){
attachMovie("subboton", "subboton"+[o], prof++);
_root["subboton"+[o]]._x = x;
_root["subboton"+[o]]._y = y;
_root["subboton"+[o]].texto = submenuArray[o].attributes.nombre;
trace(submenuArray[o].attributes.nombre);
y += 16;
} </code>
pofavó!!!! ayuda!
black
perdona playground, no ví tu respuesta... :)
pues voy a probar...
black
este xml lo tomará como uno, no?
<code><mimenu>
<menu nombre="portada" link="portada.asp">
<submenu nombre="portada_boton01" link="subportada.asp"></submenu>
<submenu nombre="portada_boton02" link="subportada.asp"></submenu>
<submenu nombre="portada_boton03" link="subportada.asp"></submenu>
</menu>
<menu nombre="tutoriales" link="portada.asp">
<submenu nombre="tutoriales_boton01" link="subportada.asp"></submenu>
<submenu nombre="tutoriales_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="noticias" link="portada.asp">
<submenu nombre="noticias_boton01" link="subportada.asp"></submenu>
<submenu nombre="noticias_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="links" link="portada.asp">
<submenu nombre="links_boton01" link="subportada.asp"></submenu>
</menu>
</mimenu></code>
meddle
esa estructura no la veo clara, pero si a ti te funciona igual soy yo... yo haria algo del estilo de las listas html, tiene mas sentido, creo, pero puedo estar equivocado:
<code>
<mimenu>
<menu>
<nombre>portada</nombre>
<link>portada.asp</link>
<submenu>
<nombre>portada_boton01</nombre>
<link>subportada.asp</link>
</submenu>
<submenu>
<nombre>portada_boton02</nombre>
<link>subportada.asp</link>
</submenu>
<submenu>
<nombre>portada_boton03</nombre>
<link>subportada.asp</link>
</submenu>
</menu>
</mimenu> </code>
black
he cambiado el código de flash a este:
<code>
// carga XML
menu = new XML();
menu.load("menu.xml");
// menu.load("menu.xml");//ruta local
menu.onLoad = interprete;
menu.ignoreWhite = true;
// -----------
prof = 1;
// -----------
function go(){
//trace("2");
}
function interprete() {
menuArray = menu.childNodes;
//trace (menu.childNodes);
y = 120;
x = 70;
//xsubmenu = 200;
for (i=0; i<menuArray.length; i++) {
submenuArray = menuArray[i].childNodes;
submenuArray.ignoreWhite = true;
for (o=0; o<menuArray[i].childNodes.length; o++){
attachMovie("boton_principal", "boton_principal"+[o], prof++);
_root["boton_principal"+[o]]._x = x;
_root["boton_principal"+[o]]._y = y;
_root["boton_principal"+[o]].texto = submenuArray[o].attributes.nombre;
trace(submenuArray[o].attributes.nombre);
Opciones_submenuArray = submenuArray[o].childNodes;
for (u=0; u<submenuArray[o].childNodes.length; u++){
attachMovie("sub_boton", "sub_boton"+[u], prof++);
trace (" sub_boton"+[u]);
_root["sub_boton"+[u]]._x = x;
_root["sub_boton"+[u]]._y = y;
_root["sub_boton"+[u]].texto = Opciones_submenuArray[u].attributes.nombre;
trace(" " add Opciones_submenuArray[u].attributes.nombre);
//_root["sub_boton"+[u]].queindex = o;
y += 16;
}
y += 16;
}
}
}
stop();</code>
de nuevo me devuleve bien todos los valores pero no me hace el attachmovie... :(
playground
Así tampoco me funciona. no te compliques la vida. a ver qué te parece esto:
<menu>
<m nombre="Principal" link="portada.asp" tipo="menu"/>
<m nombre="SubPrincipal1" link="pagina1.asp" tipo="submenu"/>
<m nombre="SubPrincipal2" link="pagina2.asp" tipo="submenu"/>
<m nombre="SubPrincipal4" link="pagina2.asp" tipo="submenu"/>
<m nombre="Noticias" link="noticias.asp" tipo="menu"/>
<m nombre="SubNoticias1" link="pagina1.asp" tipo="submenu"/>
<m nombre="SubNoticias2" link="pagina2.asp" tipo="submenu"/>
<m nombre="SubNoticias4" link="pagina2.asp" tipo="submenu"/>
</menu>
Haces el attachMovie de un clip que tenga dos frames: uno con el diseño que quiras para los menús y otro con el diseño de los submenú. Le pones etiquetas (menu y submenu) y cuando lo crees le dices gotoAndStop(tipo).
Creo que así es mas facil. Solo tienes que hacer un for para duplicarlo todo.
black
jajaja! Pues no es mala idea!!!
lo pruebo!:)
black
GRACIASSSSSSSSSSSSSS!!!!!
por si quereis el codigo para el xml de playground
<code>
// carga XML
menu = new XML();
menu.load("menuextendido.XML");
// menu.load("menu.xml");//ruta local
menu.onLoad = interprete;
menu.ignoreWhite = true;
// -----------
prof = 1;
// -----------
function go(){
//trace("2");
}
function interprete() {
menuArray = menu.childNodes;
//trace (menu.childNodes);
y = 120;
x = 70;
//xsubmenu = 200;
for (i=0; i<menuArray.length; i++) {
submenuArray = menuArray[i].childNodes;
for (o=0; o<menuArray[i].childNodes.length; o++){
//mira si es menú o submenú
if (submenuArray[o].attributes.tipo == "submenu"){
clip = "boton_principal"
}else{
clip = "sub_boton"
}
attachMovie(clip, clip+[o], prof++);
_root[clip+[o]]._x = x;
_root[clip+[o]]._y = y;
_root[clip+[o]].texto = submenuArray[o].attributes.nombre;
trace(submenuArray[o].attributes.nombre);
Opciones_submenuArray = submenuArray[o].childNodes;
y += 16;
}
}
}
stop();
</code>
Gracias a los dos!:)
gandalias
Bueno... aqui una posibole solucion con duplicateMovieClip... A ver si puedo explicarme
He visto una cosa que no me cuadra
1) En el attach al clip de las subopciones ¿donde haces referencia a la opcion principal? En el ejemplo que te mando hago el duplicate a las sobopc[opcion][subopcion]. Habria que tener cuidado que si hay opcion=1 subopcion=11 y opcion=11 y subopcion=1 ¿comprendes?... Te podria crear 2 clips con el mismo nombre...
Respecto al XML lo he creado con un nivel por encima
El codigo
// carga XML
boton_principal._visible=false;
subboton._visible=false;
menu = new XML();
menu.load("menu.xml");
// menu.load("menu.xml");//ruta local
menu.onLoad = interprete;
menu.ignoreWhite = true;
// -----------
prof = 1;
// -----------
function go(){
//trace("2");
}
function interprete() {
menuArray = menu.childNodes[0].childNodes;
y = 20;
x = 70;
for (i=0; i<menuArray.length; i++) {
duplicateMovieClip("boton_principal", "boton_principal"+[i], prof++);
_root["boton_principal"+[i]]._visible = true;
_root["boton_principal"+[i]]._x = x;
_root["boton_principal"+[i]]._y = y;
_root["boton_principal"+[i]].texto = menuArray[i].attributes.nombre;
y += 16;
submenuArray = menuArray[i].childNodes;
submenuArray.ignoreWhite = true;
for (j=0; j<menuArray[i].childNodes.length; j++){
charsubboton=string(i)+string(j);
duplicateMovieClip("subboton", "subboton"+charsubboton, prof++);
_root["subboton"+charsubboton]._visible = true;
_root["subboton"+charsubboton]._x = x;
_root["subboton"+charsubboton]._y = y;
_root["subboton"+charsubboton].texto = submenuArray[j].attributes.nombre;
y += 16;
}
}
}
stop();
EL XML
<?xml version="1.0"?>
<menuprincipal>
<menu nombre="portada" link="portada.asp">
<submenu nombre="portada_boton01" link="subportada.asp"></submenu>
<submenu nombre="portada_boton02" link="subportada.asp"></submenu>
<submenu nombre="portada_boton03" link="subportada.asp"></submenu>
</menu>
<menu nombre="tutoriales" link="portada.asp">
<submenu nombre="tutoriales_boton01" link="subportada.asp"></submenu>
<submenu nombre="tutoriales_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="noticias" link="portada.asp">
<submenu nombre="noticias_boton01" link="subportada.asp"></submenu>
<submenu nombre="noticias_boton02" link="subportada.asp"></submenu>
</menu>
<menu nombre="links" link="portada.asp">
<submenu nombre="links_boton01" link="subportada.asp"></submenu>
</menu>
</menuprincipal>
Espero que te funcione
Suerte!
black
tienes razón, pueden crear nombres iguales...
miraré lo que me mandas esta tarde, con más calma... Gracias!
de todas formas si hago...
<code>
attachMovie(clip, "subboton00"+[o], prof++); </code>
lo arreglo siempre y cuando no tenga más de 100 botones, no? :)
gandalias
Para evitarlo quizas sea mejor que utilices como clave el nombre de la opcion a la que pertenece la subopcion (suponiendo que no existen nombres de opciones iguales)
// dentro del for que genera las subopciones
charsubboton=menuArray[i].attributes.nombre+string(j);
duplicateMovieClip("subboton", "subboton"+charsubboton, prof++);
Como ves yo he usado duplicateMovieClip... es que yo y el attachMovie no tenemos aún el gusto de conocernos :).. AH. yo he usado i, y j para recorrer los bucles en lugar de i y o, por lo demás intenté respetar tu codigo.
por ejemplo
subbotonarchivo1
subbotonarchivo2
....
subbotonlinks1
subbotonlinks2
....
....
salú!
gandalias
Se me olvidaba...
Para que funcione el duplicateMovieClip tendrás que tener, colgando de _root, una instancia del boton de las opciones llamada "boton_principal" y otra instancia del boton de las subopciones llamada "subboton" que sino el duplicate no xuta.
enga!