Comunidad de diseño web y desarrollo en internet online

Problema xml: galeria de fotos y texto (este ultimo en xml)

Citar            
MensajeEscrito el 17 Sep 2008 07:49 pm
Buenas noches, compañeros!

Sigo peleándome con mi web, y me ha surgido un nuevo problemilla de novato extremo.
Parto de un menú de botones (estos botones son thumbnails). Al clickar en un botón (thumbnail) se carga una imagen grande (en un clip vacío).
Hasta ahora todo bien.
Ahora quiero que, además de la imagen grande, cargue una breve descripción en un nuevo clip vacío y, para ello, quiero usar xml.
Pues no hay manera. La foto grande carga bien, pero el texto que tengo en un xml no lo hace.
Os pongo el código a ver si me podéis ayudar:

if (xposMouse>(xMitadEscena)+30) {
this.f001._x -= factor;
this.f002._x -= factor;
this.f003._x -= factor;
this.f004._x -= factor;
this.f005._x -= factor;
this.f006._x -= factor;
this.f007._x -= factor;
}
if (xposMouse<(xMitadEscena)-30) {
this.f001._x -= factor;
this.f002._x -= factor;
this.f003._x -= factor;
this.f004._x -= factor;
this.f005._x -= factor;
this.f006._x -= factor;
this.f007._x -= factor;
}
//Corrección de f001
if (this.f007._x<anchoEscena-anchoMC) {
this.f001._x = this.f007._x+anchoMC;
}
//corrección de f002
if (this.f001._x<anchoEscena-anchoMC) {
this.f002._x = this.f001._x+anchoMC;
}
//corrección de f003
if (this.f002._x<anchoEscena-anchoMC) {
this.f003._x = this.f002._x+anchoMC;
}
//corrección de f004
if (this.f003._x<anchoEscena-anchoMC) {
this.f004._x = this.f003._x+anchoMC;
}
//corrección de f005
if (this.f004._x<anchoEscena-anchoMC) {
this.f005._x = this.f004._x+anchoMC;
}
//corrección de f006
if (this.f005._x<anchoEscena-anchoMC) {
this.f006._x = this.f005._x+anchoMC;
}
//corrección de f007
if (this.f006._x<anchoEscena-anchoMC) {
this.f007._x = this.f006._x+anchoMC;
}

//DECLARACIÓN DE VARIABLES
var precargador_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
Stage.showMenu = false;

//Para xml
var Videoxml:XML=new XML();
Videoxml.ignoreWhite=true;
Videoxml.onLoad=function(success:Boolean){
if(success){
var primer:XMLNode=this.firstChild;
var segundo:XMLNode=primer.firstChild;
nom_txt.text=segundo.attributes.nom_xml;
text_txt.text=segundo.attributes.text_xml;
} else{
trace("Error al cargar XML");
}
}
/// Fin del xml



//CREADOR DEL LISTENER
//Las funciones de los MovieClips son tres esenciales;
/* onLoadStart (Ejecutada cuando inicia la precarga)
onLoadProgress (Ejecutada cada vez que avanza la descarga)
onLoadComplete (Ejecutada cuando la precarga termina)
*/

//Función onLoadStart, asignada al objeto Listener que luego agregaremos a
//nuestro MovieClipLoader El parametro "target_mc" es una referencia al
//MovieClip de destino
listener.onLoadStart = function(target_mc) {
//Colocamos la barra de precarga en el escenario con el nombre "barra_mc"
_root.attachMovie("barra", "barra_mc", _root.getNextHighestDepth());
//Ubicamos la barra en la mitad del escenario
_root.barra_mc._y = Stage.height/2;
_root.barra_mc._x = Stage.width/2;
//Y nuestra barra esta lista para moverse en el evento onLoadProgress
};

//Función onLoadProgress, es la función clave, tiene tres parametros
//target_mc, quees igual que el anterior, loadedBytes, que nos dice la
//cantidad de bytes cargados y totalBytes que nos dice la cantidad total
//de bytes de la pelicula en proceso de descarga
listener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
//Declaramos la variable de calculo de porcentaje
var porcentaje:Number;
//Calculamos el porcentaje con las variables que le llegan por parametro a la función
porcentaje = Math.round((loadedBytes*100)/totalBytes);
//Vamos al frame del porcentaje en nuestra barra de carga
_root.barra_mc.gotoAndStop(porcentaje);
//Ahora escondemos el objeto de la precarga y lo frenamos
target_mc._visible = false;
target_mc.stop();
};

//Función onLoadComplete
listener.onLoadComplete = function(target_mc) {
//Como ya cargo completo, entonces quitamos la barra
_root.barra_mc.removeMovieClip();
//Y mostramos el objeto
target_mc._visible = true;
target_mc.play();
};

precargador_mcl.addListener(listener);

f001.onRelease = function() {
//Aqui le decimos a nuestro MovieClipLoader que cargue el archivo
//"pelicula.swf" y que lo muestre en "carga_mc" :D
precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/anuncio04.jpg", contenedor);
Videoxml.load("../03_Textos/publicidad.xml",contenedor2);
};

gotoAndPlay(1);


Os pongo en color rojo el código que he añadido para intentar hacer ésto.
El caso es que sin en la penúltima línea "Videoxml.load("../03_Textos/publicidad.xml",contenedor2);" intento cargar una foto como en la línea anterior ( precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/anuncio04.jpg", contenedor);), carga correctamente.

Por favor, ¿qué estoy haciendo mal?

Muchísimas gracias de antemano.

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2008 03:18 pm
Porfa,

¿alguna sugerencia? :oops:

¡Gracias!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2008 03:24 pm
Si quieres que te repondan y no ignoren tu post, lo mejor es utilizar un buen formato de código para quien lo revise no pase trabajo en leerlo.

Código :

[as]
//Codigos action script dentro de tags de AS
[/as]

[xml]
<!--situa los xml dentro de los tags respectivos-->
[/xml]

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Sep 2008 05:15 pm
Tienes razón!

Ahora revisaré la pregunta y, además, eliminaré la parte de código que sobra para que la lectura sea más limpia.
Gracias por el consejo! :)

Saludos!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2008 05:33 pm
Repito la consulta de manera más ordenada. He omitido parte del código que creo no es importante para este caso...
Como veréis abajo, mi objetivo es que al pulsar el botón f001 cargue una imagen en un mc vacío llamado contenedor (esto sí me funciona), y que a la vez cargue una descripción de un xml en un mc vacío llamado contenedor2 (esto no me funciona). En el mc "contenedor2" tengo dos cajas de texto dinámico (nom.txt y text.txt).
La peli se compone de 2 fotogramas, y este código lo tengo en el segundo.

Código ActionScript :

var Videoxml:XML=new XML();
Videoxml.ignoreWhite=true;
Videoxml.onLoad=function(success:Boolean){
if(success){
   var primer:XMLNode=this.firstChild;
   var segundo:XMLNode=primer.firstChild;
   nom_txt.text=segundo.attributes.nom_xml;
   text_txt.text=segundo.attributes.text_xml;
} else{
   trace("Error al cargar XML");
}
}
precargador_mcl.addListener(listener);

f001.onRelease = function() {
   precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/anuncio04.jpg", contenedor);
   Videoxml.load("../03_Textos/publicidad.xml",contenedor2);
};


No tengo el xml a mano para mostrarlos, pero os puedo decir que funciona en otra peli que hice de prueba. Eso sí, le cambié el nombre al archivo (¿es importante?).

Porfa, si mi pregunta es muy tonta y me podéis indicar algún tutorial para que me busque la vida, os lo agradeceré mucho. Os aseguro que he buscado mucho, pero no he encontrado nada tan concreto...

Muchas gracias!!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2008 06:10 pm
Sería bueno ver una estructura del XML, no para ver si el XML está bien , sino para ver si las referencias que haces a él desde el flash están bien.

Ahora primero que todo debes comprobar que el XML está cargando perfectamente, sitúa dentro del onload un trace del XML en si para que compruebes si lo está leyendo sin problemas, si no te sale, el error hay que buscarlo en otro lado.

Código ActionScript :

Videoxml.onLoad=function(success:Boolean){ 
    if(success){
        trace(this);
    } else{
        trace("Error al cargar XML"); 
    }
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Sep 2008 06:35 pm
Ups...

he colocado el código donde me indicas, y me aparece el siguiente mensaje de error:

<?xml version="1.0" encoding="UTF-8"?><texto><datos nom_xml="nombre" text_xml="texto" /></texto>


En el xml tengo lo siguiente:

Código XML :

<?xml version="1.0" encoding="UTF-8"?>
<texto>
   <datos nom_xml="nombre" text_xml="texto" />
</texto>


Por cierto, ahora me doy cuenta de que el nombre original del archivo xml era "datos.xml" y yo lo cambié por "publicidad.xml". ¿Tiene algo que ver?

Muchas gracias!!!!! :D

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2008 06:46 pm
Lo que salió no fue un error, si te fijas bien lo que hizo fue lanzar el XML, el mismo que posteaste abajo, por lo tanto está bien todo, ya puedes eliminar el trace.

No hace nada que le hayas cambiado el nombre porque como veo se lo cambiaste al código también, además que con el experimento anterior comprobamos que el XML se cargaba bien.

Ahora, el error está en que tienes los campos de textos dentro de un MovieClip y cuando tratas de cambiarle el texto a los campos no le indicas a flash donde se encuentran, debes darle el camino completo. Es lo mismo que ocurre en la vida real, si te digo ve a donde está Pepe y cámbiale la gorra por esta, lo primero que me dirás es ¿donde está Pepe?, por lo tanto lo correcto sería, ve hasta el final del pasillo, dobla la curva y bajo la ventana está Pepe, cámbiale la gorra por esta. Es sólo un chiste pero creo que te describirá claramente a que me refiero.

Código ActionScript :

_root.contenedor2.nom_txt.text=segundo.attributes.nom_xml;
_root.contenedor2.text_txt.text=segundo.attributes.text_xml;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Sep 2008 07:34 pm
¡Funciona!

Elchininet, eres un genio! No sabes cuánto te agradezco la ayuda que me has prestado. ¡Ahora ya puedo acabar mi web!
Bueno, eso espero, porque con mi torpeza con AS seguro que me encuentro más problemillas...
Excelente el ejemplo de Pepe. Tenía un poco "atragandados" los conceptos de _root y de _parent, y ahora lo veo mucho más claro.

¡Muchísimas gracias nuevamente!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2008 12:47 am
Ay, ay, ay...

espero no abusar de vuestro saber hacer y no acabar con vuestra paciencia... :oops:
He intentado un millar de cosas antes de añadir este post, pero no me sale... :|

Gracias a la ayuda de Elchininet conseguí que mi película cargase los datos de un xml... pero solo en el primer botón.
He tratado de entender, buscar ejemplos y modificar mi código para que en el siguiente botón me cargue el nodo 1 de mi xml, en el siguiente el 2, y así sucesivamente. Creo saber que la clave está en utilizar junto a "firstChild" la propiedad "childNodes", pero no me funciona nada. He tratado de redefinir las variables "primer" y "segundo", pero debo cometer errores imperdonables que me tienen atascado. :cry:

¿No estará el problema en mi xml? Preparé este para hacer mis pruebas:

Código XML :

<?xml version="1.0" encoding="UTF-8"?> 
<texto> 
   <datos nom_xml="nombre" text_xml="texto" />
   <datos nom_xml="nombre1" text_xml="texto1" />
</texto> 



¿Podéis ayudarme?

Muchas gracias por vuestra paciencia con los novatos!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2008 02:28 am
Postea el código que le pones a tres de tus botones, el que debe cargar el nodo 0, el del 1 y el del 2.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 20 Sep 2008 10:49 am
Seguro que es una barbaridad, pero esto es lo que he intentado:
1. He declarado la variable n como un número 0
2. He añadido a childNodes[n] a las líneas que contenían firstChild
3. En cada código de la carga de los botones, he redefinido n con el número de nodo que quiero cargar

Código ActionScript :

var Videoxml:XML=new XML();
var n:Number=0
Videoxml.ignoreWhite=true;
Videoxml.onLoad=function(success:Boolean){
   if(success){
      var primer:XMLNode=this.firstChild.childNodes[n];
      var segundo:XMLNode=primer.firstChild.childNodes[n];
      _root.contenedor2.nom_txt.text=segundo.attributes.nom_xml; 
      _root.contenedor2.text_txt.text=segundo.attributes.text_xml;
   } else{
      trace("Error al cargar XML");
   }
}

//CODIGO DEL BOTON

f001.onRelease = function() {
   n=0
   precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/anuncio04.jpg", contenedor);
   Videoxml.load("../03_Textos/publicidad.xml",contenedor2);
 
};

f002.onRelease = function() {
   n=1
   precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/anuncio17.jpg", contenedor);
   Videoxml.load("../03_Textos/publicidad.xml",contenedor2);

};


La verdad es que no me sorprende que no me funcione, porque es una solución ingenua, ¿no?

Muchas gracias!!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2008 11:59 am
Primero que todo, si decidiste usar XML debes utilizar todas las facilidades que te brinda, no deberías hacer un código para cada botón cuando cada botón hace lo mismo y las diferencias en el código del botón las pones en el XML, aquí tienes una propuesta de XML:

Código XML :

<?xml version="1.0" encoding="UTF-8"?>  
<texto>  
   <datos nom_xml="nombre" text_xml="texto" anuncio="anuncio04.jpg"/> 
   <datos nom_xml="nombre1" text_xml="texto1" anuncio="anuncio17.jpg"/> 
</texto>  


De esta forma ya tienes guardado en el XML que anuncio debe abrir este.

Tampoco debes cargar el XML cada vez que se presione un botón, porque lo único que deseas es cargar un nodo del XML y no debes hacer a flash leer 100 nodos cuando en realidad te interesa 1. El XML lo debes cargar una sola vez, al inicio de la película, al cargar el XML puedes saber cuantos nodos tienes y dependiendo de este dato se programa un ciclo para crear las acciones de los botones, y estos lo que harán será acceder al nodo que le corresponde:

Código ActionScript :

//---Declaración de variables
var videoXML:XML = new XML();
var nodos:Array;

videoXML.ignoreWhite = true;

//---Cuando se cargue el XML
videoXML.onLoad = function(success:Boolean):Void  {

   if (success) {

      nodos = this.firstChild.childNodes;
      var total:Number = nodos.length;

      for (var i:Number = 0; i < total; i++) {

         _root["f00" + (i + 1)].numero = i;

         //---Acción de onPress de los botones
         _root["f00" + (i + 1)].onRelease = function():Void  {

            _root.contenedor2.nom_txt.text = nodos[this.numero].attributes.nom_xml;
            _root.contenedor2.text_txt.text = nodos[this.numero].attributes.text_xml;
            precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio, contenedor); 

         };
      }
   } else {

      trace("Error al cargar XML");

   }
};

videoXML.load("../03_Textos/publicidad.xml");


como lo estabas haciendo pretendías que si el XML tuviera 100 nodos escribir 100 acciones de los botones, esto no es viable, de esta forma la programación no varía, si quieres añadir otro botón lo creas y añades el nodo al XML.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 20 Sep 2008 02:13 pm
Elchininet,

muchas gracias por tu ayuda... no tiene precio. ^^

Mi ignorancia no tiene límites, y quería consultarte una última cosilla.
Con tu respuesta todo funciona perfectamente, pero en local. No consigo que me funcione cuando lo subo al servidor. Hasta ahora, mi esquema esta simple. Probando la peli en mi equipo, utilizo la siguiente ruta de carpetas:

Código ActionScript :

            precargador_mcl.loadClip("../02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio, contenedor);  
 
videoXML.load("../03_Textos/publicidad.xml"); 



Para subirlo al servidor, cambio la raíz de las carpetas eliminando "../":

Código ActionScript :

            precargador_mcl.loadClip("02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio, contenedor);  
 
videoXML.load("03_Textos/publicidad.xml"); 



Hasta ahora me funcionaba, pero ahora no. ¿Sabes por qué me falla?

Muchas gracias de nuevo!!!!!!!!! :D

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2008 06:51 pm
La ruta debe ser respectiva al HTML no al SWF.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Sep 2008 12:08 pm
Si, eso creo que lo tengo bien. Por lo menos antes me funcionaba.
Mi estructura de carpetas es:

Proyecto/ (contiene index.html y las siguientes subcarpetas)
01_Flash (contiene los .fla y los .swf)
02_Imagenes (contiene subcarpetas con los .jpg)
03_Textos (contiene los .xml)

Cuando trabajo en mi equipo con los .fla y llamo por ejemplo a un .xml, utilizo "../03_Textos/doc.xml" porque estoy en la carpeta 01_Flash.
Cuando lo subo al servidor y pretendo lo mismo, utilizo "03_Textos/doc.xml" porque estoy en la carpeta Proyecto (es donde guardo el index.html).

Voy a revisar todo de nuevo por si se me ha escapado algo, pero creo que mi intención es correcta, ¿no?

Muchas gracias!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Sep 2008 04:17 pm
Mmm...

No encuentro ningún problema en las rutas de acceso a los archivos.
¿Qué me aconsejáis?

Gracias!!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2008 09:53 am
Estos problemas muchas veces suelen ser por rutas, otra que tu servidor no soporte mayúsculas, así que puedes cambiar todo a minúsculas y por último limpia la caché del navegador, puede ser que esté tratando de leer una ruta antigua.

De todas maneras postea el código completo y un link a la página online.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 07:00 pm
Hola, Elchininet.

Estoy bastante desconcertado, porque:
1. Rutas: no he modificado nada, y antes me funcionaba
2. Mayúsculas: tampoco he modificado esto, y antes me funcionaba
3. Caché: siempre lo limpio antes de probar algo que acabo de subir, y esta vez he insistido especialmente

La verdad es que lo único que he modificado ha sido el AS, pero algo se me debe escapar...
La peli tiene 2 fotogramas. Se trata de un swf que carga en un MC vacío desde un menú anterior.

FOTOGRAMA 1: AS para dar un efecto "slide" al menú

Código ActionScript :

var xposMouse:Number = _root._xmouse;
var velMax:Number = 6;
var velMin:Number = 0;
var xMitadEscena:Number = 330;
var anchoEscena:Number = 770;
var anchoMC:Number = 110;
var factor:Number = xposMouse*(velMax-velMin)/xMitadEscena+2*velMin-velMax;

if (factor>velMax) {
   factor = velMax;
} else if (factor<-velMax) {
   factor = -velMax;
}

//para la f001
if (f001._x>anchoEscena) {
   this.f001._x = -anchoMC;
}
if (f001._x<-anchoMC) {
   this.f001._x = anchoEscena;
}
//para la f002
if (f002._x>anchoEscena) {
   this.f002._x = -anchoMC;
}
if (f002._x<-anchoMC) {
   this.f002._x = anchoEscena;
}
//para la f003
if (f003._x>anchoEscena) {
   this.f003._x = -anchoMC;
}
if (f003._x<-anchoMC) {
   this.f003._x = anchoEscena;
}
//para la f004
if (f004._x>anchoEscena) {
   this.f004._x = -anchoMC;
}
if (f004._x<-anchoMC) {
   this.f004._x = anchoEscena;
}
//para la f005
if (f005._x>anchoEscena) {
   this.f005._x = -anchoMC;
}
if (f005._x<-anchoMC) {
   this.f005._x = anchoEscena;
}
//para la f006
if (f006._x>anchoEscena) {
   this.f006._x = -anchoMC;
}
if (f006._x<-anchoMC) {
   this.f006._x = anchoEscena;
}
//para la f007
if (f007._x>anchoEscena) {
   this.f007._x = -anchoMC;
}
if (f007._x<-anchoMC) {
   this.f007._x = anchoEscena;
}
//para la f008
if (f008._x>anchoEscena) {
   this.f008._x = -anchoMC;
}
if (f008._x<-anchoMC) {
   this.f008._x = anchoEscena;
}

play();


FOTOGRAMA 2: corrección del efecto "slide", precarga y enlaces de los botones:

Código ActionScript :

if (xposMouse>(xMitadEscena)+30) {
   this.f001._x -= factor;
   this.f002._x -= factor;
   this.f003._x -= factor;
   this.f004._x -= factor;
   this.f005._x -= factor;
   this.f006._x -= factor;
   this.f007._x -= factor;
   this.f008._x -= factor;
}
if (xposMouse<(xMitadEscena)-30) {
   this.f001._x -= factor;
   this.f002._x -= factor;
   this.f003._x -= factor;
   this.f004._x -= factor;
   this.f005._x -= factor;
   this.f006._x -= factor;
   this.f007._x -= factor;
   this.f008._x -= factor;
}

//Corrección de f001
if (this.f008._x<anchoEscena-anchoMC) {
   this.f001._x = this.f008._x+anchoMC;
}
//corrección de f002
if (this.f001._x<anchoEscena-anchoMC) {
   this.f002._x = this.f001._x+anchoMC;
}
//corrección de f003
if (this.f002._x<anchoEscena-anchoMC) {
   this.f003._x = this.f002._x+anchoMC;
}
//corrección de f004
if (this.f003._x<anchoEscena-anchoMC) {
   this.f004._x = this.f003._x+anchoMC;
}
//corrección de f005
if (this.f004._x<anchoEscena-anchoMC) {
   this.f005._x = this.f004._x+anchoMC;
}
//corrección de f006
if (this.f005._x<anchoEscena-anchoMC) {
   this.f006._x = this.f005._x+anchoMC;
}
//corrección de f007
if (this.f006._x<anchoEscena-anchoMC) {
   this.f007._x = this.f006._x+anchoMC;
}
//corrección de f008
if (this.f007._x<anchoEscena-anchoMC) {
   this.f008._x = this.f007._x+anchoMC;
}

var precargador_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
Stage.showMenu = false;

listener.onLoadStart = function(target_mc) {
   _root.attachMovie("barra", "barra_mc", _root.getNextHighestDepth());
   _root.barra_mc._y = Stage.height/2;
   _root.barra_mc._x = Stage.width/2;
};

listener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
   var porcentaje:Number;
   porcentaje = Math.round((loadedBytes*100)/totalBytes);
   _root.barra_mc.gotoAndStop(porcentaje);
   target_mc._visible = false;
   target_mc.stop();
};

listener.onLoadComplete = function(target_mc) {
   _root.barra_mc.removeMovieClip();
   target_mc._visible = true;
   target_mc.play();
};

precargador_mcl.addListener(listener);


//---Declaración de variables 
var videoXML:XML = new XML(); 
var nodos:Array; 
 
videoXML.ignoreWhite = true; 
 
//---Cuando se cargue el XML 
videoXML.onLoad = function(success:Boolean):Void  { 
 
   if (success) { 
 
      nodos = this.firstChild.childNodes; 
      var total:Number = nodos.length; 
 
      for (var i:Number = 0; i < total; i++) { 
 
         _root["f00" + (i + 1)].numero = i; 
 
         //---Acción de onPress de los botones 
         _root["f00" + (i + 1)].onRelease = function():Void  { 
 
            _root.contenedor2.nom_txt.text = nodos[this.numero].attributes.nom_xml; 
            _root.contenedor2.text_txt.text = nodos[this.numero].attributes.text_xml; 
            precargador_mcl.loadClip("02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio, contenedor);  
 
         }; 
      } 
   } else { 
 
      trace("Error al cargar XML"); 
 
   } 
}; 
 
videoXML.load("03_Textos/publicidad.xml"); 


gotoAndPlay(1);


Mi página web es www.idgrafico.com

Muchas gracias por tu interés, de verdad te lo agradezco.
Un saludo!!!!!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2008 07:56 pm
Sitúa este código javascript en head de tu html:

Código Javascript :

<script type="text/javascript">
  
   function traceSomething(msg){
   
       alert(msg);
   
   }

</script>


Después en el código del flash pon esto:

Código ActionScript :

_root["f00" + (i + 1)].onRelease = function():Void  {

   _root.contenedor2.nom_txt.text = nodos[this.numero].attributes.nom_xml;
   _root.contenedor2.text_txt.text = nodos[this.numero].attributes.text_xml;
   precargador_mcl.loadClip("02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio,contenedor);
   
   ExternalInterface.call("traceSomething", nodos[this.numero].attributes.nom_xml + " " + nodos[this.numero].attributes.text_xml);

};


Y postea que te sale cuando presionas los botones.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 08:02 pm
Y después que hagas esto, explica que cosa es el gotoAndPlay(1) que tienes puesto, no creo que estés mandando a cargar el XML constantemente cada vez que pase por ese frame.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 09:55 pm
Hola, elchininet.

He seguido tus indicaciones, pero nada parece haber cambiado. Es posible que lo haya hecho mal... Las últimas líneas de mi fotograma 2 quedan así:

Código ActionScript :

//---Cuando se cargue el XML 
videoXML.onLoad = function(success:Boolean):Void  { 
 
   if (success) { 
 
      nodos = this.firstChild.childNodes; 
      var total:Number = nodos.length; 
 
      for (var i:Number = 0; i < total; i++) { 
 
         _root["f00" + (i + 1)].numero = i; 
 
         //---Acción de onPress de los botones 
        _root["f00" + (i + 1)].onRelease = function():Void  { 
 
          _root.contenedor2.nom_txt.text = nodos[this.numero].attributes.nom_xml; 
         _root.contenedor2.text_txt.text = nodos[this.numero].attributes.text_xml; 
         precargador_mcl.loadClip("02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio,contenedor); 
    
         ExternalInterface.call("traceSomething", nodos[this.numero].attributes.nom_xml + " " + nodos[this.numero].attributes.text_xml); 
 
      }; 
      } 
   }  
}; 
 
videoXML.load("03_Textos/publicidad.xml"); 


gotoAndPlay(1);


Al presionar los botones no pasa nada... (estoy con Firefox 3 y con Safari 3).

En cuanto al gotoAndPlay(1)... ¿es una barbaridad? La verdad es que cuando lo utilizo el efecto del menú va más suave que si lo elimino. ¿Debería tener un fotograma 0 con el AS que cargue el xml para no cargarlo contínuamente?

Santa paciencia la tuya...

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2008 10:57 pm
Era lo que necesitaba saber, tus botones no tienen acciones porque constantemente estás leyendo el XML y asignándoselas, en el primer frame lee el XML y asigna las acciones, ya después si quieres pon los códigos de mover las imágenes en el frame 2 y 3 y el loop lo haces con gotAndPlay(2), de esta manera solo se lee el XML y se asignan las acciones una sola vez.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Sep 2008 07:51 pm
:cry: :cry: :cry:

No me funciona...

He seguido tu consejo, creando un fotograma 1 vacío de contenido salvo por el AS con la carga del xml y las acciones de los botones, dejando en los fotogramas 2 y 3 el AS del movimiento del menú, con el gotoAndPlay(2).

También he probado varias combinaciones: el fotograma 1 con contenido (en las capas); la precarga en el fotograma 2, en el 3 y la eliminación de la misma; las acciones de los botones en el fotograma 2, en el 3...

No se si cortarme las venas o dejar que tú me las cortes...

Saludos!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Sep 2008 09:43 pm
Por ahora elimina los frames, deja un solo frame con la carga y las acciones, no dejes que las imágenes se muevan, prueba de esta manera, hay que ir descartando posibilidades, pero hasta que no te ejecute el javascript de ExternalInterface nada funcionará.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Sep 2008 10:59 pm
Pues ahora sí que no entiendo nada...

He eliminado los fotogramas del efecto del menú, dejando 1 fotograma con los botones (y los clips contenedores, claro), más la capa de AS con el siguiente código:

Código ActionScript :

var precargador_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
Stage.showMenu = false;

listener.onLoadStart = function(target_mc) {
   _root.attachMovie("barra", "barra_mc", _root.getNextHighestDepth());
   _root.barra_mc._y = Stage.height/2;
   _root.barra_mc._x = Stage.width/2;
};

listener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
   var porcentaje:Number;
   porcentaje = Math.round((loadedBytes*100)/totalBytes);
   _root.barra_mc.gotoAndStop(porcentaje);
   target_mc._visible = false;
   target_mc.stop();
};

listener.onLoadComplete = function(target_mc) {
   _root.barra_mc.removeMovieClip();
   target_mc._visible = true;
   target_mc.play();
};

precargador_mcl.addListener(listener);

//---Declaración de variables 
var videoXML:XML = new XML(); 
var nodos:Array; 
 
videoXML.ignoreWhite = true; 
 
//---Cuando se cargue el XML  
videoXML.onLoad = function(success:Boolean):Void  {  
  
   if (success) {  
  
      nodos = this.firstChild.childNodes;  
      var total:Number = nodos.length;  
  
      for (var i:Number = 0; i < total; i++) {  
  
         _root["f00" + (i + 1)].numero = i;  
  
         //---Acción de onPress de los botones  
        _root["f00" + (i + 1)].onRelease = function():Void  {  
  
          _root.contenedor2.nom_txt.text = nodos[this.numero].attributes.nom_xml;  
         _root.contenedor2.text_txt.text = nodos[this.numero].attributes.text_xml;  
         precargador_mcl.loadClip("02_Imagenes/01-2_publicidad/big/" + nodos[this.numero].attributes.anuncio,contenedor);  
     
         ExternalInterface.call("traceSomething", nodos[this.numero].attributes.nom_xml + " " + nodos[this.numero].attributes.text_xml);  
  
      };  
      }  
   }   
};  
  
videoXML.load("03_Textos/publicidad.xml");




¿Es posible que el problema esté en la combinación de la precarga con el resto? He eliminado el código de precarga, eliminando también en la línea de carga de la imagen el "precargador_mcl", pero también debería cambiar el "loadClip" por otra función, ¿no? :oops: No estoy seguro de lo que digo... :oops:

Como suele ser habitual, no me funciona nada... :cry: :cry: :cry:

Por cierto, elchininet, estoy intentando comprender todo el código que me sugieres (nada de "copy-paste") y, aunque me cuesta un poquito, intento aplicarme todo lo posible para no dar tanto la lata. Espero que mis dudas ayuden a otr@s cuando visiten este foro que, dicho sea de paso, me parece excepcional.

Muchas gracias nuevamente!!

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Sep 2008 09:09 am
Seguimos resumiendo el código para detectar el problema:

Código ActionScript :

//---Declaración de variables  
var videoXML:XML = new XML();  
var nodos:Array;  
  
videoXML.ignoreWhite = true;  
  
//---Cuando se cargue el XML   
videoXML.onLoad = function(success:Boolean):Void  {   
   
   if (success) {   
   
      nodos = this.firstChild.childNodes;   
      var total:Number = nodos.length;   
   
      for (var i:Number = 0; i < total; i++) {   
   
         _root["f00" + (i + 1)].numero = i;   
   
         //---Acción de onPress de los botones   
        _root["f00" + (i + 1)].onRelease = function():Void  {           
         ExternalInterface.call("traceSomething", nodos[this.numero].attributes.nom_xml + " " + nodos[this.numero].attributes.text_xml);   
   
      };   
      }   
   }    
};   
   
videoXML.load("03_Textos/publicidad.xml");


Deja esto solo en el frame de tu película y postea el código del html con la función que te dije que insertaras.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 24 Sep 2008 09:43 am
Ok.

He dejado solo ese código en la capa AS (aunque mantengo el resto de capas).
El código del html es el siguiente (pongo solo el principio para no agobiar):

Código :

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-4750862-2";
urchinTracker();
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript"> 
   
   function traceSomething(msg){ 
    
       alert(msg); 
    
   } 
 
</script> 
<link href='http://idgrafico.com/favicon.png' rel='shortcut icon' type='image/png'>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>idGrafico.com | Diseño Grafico</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="title" content="idGrafico.com | Diseño Grafico">
<meta name="description" content="Diseño grafico">


¿Ves algo raro?... yo no veo nada... :|

Por midisseny

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Sep 2008 02:10 pm
Parece estar todo bien, hay que ir a la raiz del asunto, saber si carga bien el XML:

Código ActionScript :

//---Declaración de variables   
var videoXML:XML = new XML();
var nodos:Array;

videoXML.ignoreWhite = true;

//---Cuando se cargue el XML    
videoXML.onLoad = function(success:Boolean):Void  {

   if (success) {

      ExternalInterface.call("traceSomething", "se cargo el XML");
      
   }else{
      
      ExternalInterface.call("traceSomething", "no se pudo cargar el XML");
      
   }
   
};

videoXML.load("03_Textos/publicidad.xml");

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 24 Sep 2008 09:29 pm
Mmm...

pues no parece pasar nada. He sustituído el código que tenía por el que me indicas, y he probado a modificar la ruta para ver el resultado en local (añadiendo el "../" en la ruta). Pero no reacciona...

He subido los archivos al servidor, y pasa lo mismo. Supongo que es raro, ¿no?. Deduzco por el código que me sugieres, que la idea es ver un mensaje de confirmación si el xml carga bien o no. Echando la vista atrás, recuerdo que en un momento dado todo parecía funcionar bien el local (el xml funcionaba, cargando las imageney y los textos), pero dejaba de hacerlo al subirlo al servidor.

Seguro que de nuevo algo se me debe escapar. ¿Alguna sugerencia? Me sabe muy mal hacerte invertir todo este tiempo en intentar echarme un cable... confío en que muchas otras personas puedan resolver dudas leyendo los post.

Un saludo!

Por midisseny

26 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.