Comunidad de diseño web y desarrollo en internet online

coordenadas en flash a través de un xml

Citar            
MensajeEscrito el 01 Jun 2009 04:40 pm
Hola a todos, tengo un txt dinamico en flash y una imagen, que se carga desde un xml, en el xml tengo ésto:

Código XML :

<ampliaciones>
   <ampliacion> 
      <titulo>AMPLIACION NUMERO UNO</titulo>
      <image>ampliaciones/0.jpg</image>
   </ampliacion>
</ampliaciones>


Y en el flash lo cargo así:

Código ActionScript :

var indice:Number;
var ampliaciones_xml:XML;
var titulo:String;
var imagen:String;

titulo = ampliaciones_xml.firstChild.childNodes[_indice].firstChild.firstChild.nodeValue;
imagen = ampliaciones_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue;
this.mensaje_txt.htmlText = titulo;


Y lo que pretendo hacer es, que tanto la variable titulo, como image, poner en el xml unas coordenadas, y que en el flash se coloquen según dichas coordenadas.

Yo pensaba que poniendo la propiedad _x e _y a imagen, sería suficiente, pero me da error...

Gracias de antemano :)

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 08:00 pm
En tu code no has puesto tu intento, ponlo y además cuentanos que error te da

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 08:43 pm
Cierto, perdonad... A ver, yo probé a poner ésto:

Código ActionScript :

imagen._x=posx;
imagen._y=posy;


Y justo debajo (en el xml) de image, poner los tags <posx></posx> e <posy></posy>.

Pero ya en el flash me decía que "no hay ninguna propiedad que lleve por nombre x (e igual con la y).

¿?

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 09:06 pm
Claro, porque imagen (como podrás ver en un código) es un String, quizás quisiste decir mensaje_txt

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 09:13 pm
si, lo sé, ese es el problema... que lo que quiero es la imagen... qué puedo hacer entonces para ponerle coordenadas a la imagen a través del xml? Tengo q cambiar la declaración de "image" ??

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 09:43 pm
En tu código no veo ningún elemento que pueda mostrar imagenes, solo un par de textos. Si explicas de que forma muestras la imagen, quizás podamos encontrar cual es el elemento al que hay que asignarle un x y un y

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 09:57 pm
Es q como el code era muy largo, no lo quería poner entero, pero como veréis en el code abajo (que ya lo pongo entero), cargo un xml y desde el xml como véis en mi post inicial, cogo la imagen.... (no sé cómo explicarlo mejor... creo q en el code y los comentarios se ve más claro...)

Código ActionScript :

var precargador_mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();

//Permite caracteres tradicionales como letras con tilde la ñ, etc.
System.useCodepage = true;
//Se declara la variable indice de tipo número (utilizada para referencia la noticia a mostrar)
var indice:Number;
//Se declara la variable ampliaciones_xml de tipo XML (utilizada para almacenar el documento xml)
var ampliaciones_xml:XML;

/*
Funcion cargarDatos (utilizada para cargar y cambiar las ampliaciones en el documento)
Esta función recibe un parámetro "_indice" que corresponde al elemento noticia  a mostrar
*/


function cargarDatos(_indice:Number) {

 //Se inicializan variables utilizadas para almenar los datos de una noticia
var titulo:String;
var imagen:String;
//Recuperando datos del objeto xml
//Se accede al primer hijo de elemento [noticia] y se recupera al valor del primer elemento de [titulo]
titulo = ampliaciones_xml.firstChild.childNodes[_indice].firstChild.firstChild.nodeValue;
//Se accede al último hijo de elemento [noticia] y se recupera el valor del primer elemento de [imagen]
imagen = ampliaciones_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue;
//Mostrando los datos recuperados en el cuado de texto mensaje_txt y cargando la imagen en pantalla_mc
this.mensaje_txt.htmlText = titulo;
//Cargado la imagen JPG externa en el clip pantalla_mc con el valor recuperado del objeto xml
imagen._x=posx;
imagen._y=posy;



var mcload:MovieClipLoader = new MovieClipLoader();
var mclist:Object = new Object();
mclist.onLoadStart = function(clip:MovieClip) {
   
   trace("Iniciar Carga")
   //Colocamos la barra de precarga en el escenario con el nombre "barra_mc"
   _root.attachMovie("loadingID", "loading", _root.getNextHighestDepth());
   //Ubicamos la barra en la mitad del escenario
   _root.loading._y = 259;
   _root.loading._x = 614;
   //Y nuestra barra esta lista para moverse en el evento onLoadProgress
}
mclist.onLoadProgress = function(clip:MovieClip) {
    trace("Cargando...");
   //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.loading.gotoAndStop(porcentaje);
   //Ahora escondemos el objeto de la precarga y lo frenamos
   clip._visible = false;
   clip.stop();
}
mclist.onLoadInit = function(clip:MovieClip) {

   
    trace("Carga Completa");
   //Como ya cargo completo, entonces quitamos la barra
   _root.loading.removeMovieClip();
   //Y mostramos el objeto
   clip._visible = true;
   clip.play();
   

}
mcload.addListener(mclist);
mcload.loadClip(imagen, pantalla_mc);
      
}

//Función que permite avanzar a la [noticia] siguiente almacenada en el objeto xml
siguiente_btn.onPress = function() {

        //comprobando si existe el siguiente elemento [noticia]
        if (ampliaciones_xml.firstChild.childNodes[indice+1] != null) {
               
             //retringue  a avanzar solo si hay una [noticia] siguiente
                indice++;
                //incrementado en uno el indice
                cargarDatos(indice);
                //recuprando y mostrando los datos y la imagen en la pantalla
            
        }
};
//Función que permite retroceder a la noticia anterior almacenada en el objeto xml      
anterior_btn.onPress = function() {

        //comprobando si existe una elemento [noticia] anterior
        if (ampliaciones_xml.firstChild.childNodes[indice-1] != null) {
                //retringue  a avanzar solo si hay una [noticia] anterior
                indice--;
                //reducciendo en uno el indice
                cargarDatos(indice);
                //recuprando y mostrando los datos y la imagen en la pantalla

        }
};

//Inicializaciones
indice = 0;
//inicializando indice en 0 para mostrar la primera noticia
//creando el objeto ampliaciones_xml de typo XML
ampliaciones_xml = new XML();
//Permite que el objeto XML ignore los espacios en blanco entre marca y marca del documento XML
ampliaciones_xml.ignoreWhite = true;
//El método load() permite cargar el documento xml "ampliaciones.xml"
ampliaciones_xml.load("ampliaciones.xml");
//El evento onLoad de activa cuado se haya cargado el documento ampliaciones.xml
ampliaciones_xml.onLoad = function() {
        //Se llama a la funcion cragarDatos para mostar la primera noticia (esto por la variable indice en 0)
        cargarDatos(indice);
};



Mil gracias solisarg por tu tiempo.

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 08:29 am
Creo que poner el code entero, pues agobia un poco a la hora de ayudarme, pero lo puse por si acaso se necesita alguna información para poder resolver el problema....

Pero de todas formas, creo que a la pregunta de solisarg, de qué forma se carga la imagen, creo q la respuesta, está al final del code, en los botones, justo aqui:

Código ActionScript :

if (ampliaciones_xml.firstChild.childNodes[indice+1] != null) { 
                
             //retringue  a avanzar solo si hay una [noticia] siguiente 
                indice++; 
                //incrementado en uno el indice 
                cargarDatos(indice); 
                //recuprando y mostrando los datos y la imagen en la pantalla 
             
        } 


Pues es ahí que hace que se cargue del xml la ruta de la imagen deseada, y la va mostrando una a una...

Si, por favor, alguién me puede ayudar.... lo necesito con urgencia, y no sé cómo resolverlo...

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 08:49 am
Según tu código "pantalla_mc" es el MovieClip que lee la imagen, es a pantalla mc a quien tienes que dar posiciones, no a imagen que es un String que contiene el camino a la imagen:

Código ActionScript :

//---El evento onloadInit envía como parámetro el movieClip en el que se ha cargado el contenido (en este caso "pantalla_mc")
mclist.onLoadInit = function(clip:MovieClip):Void { 

    clip.x = posx;
    clip.y = posy;

}


Lo que debes postear es como has insertado las coordenadas en el XML y en que parte del código accedes a el nodo de las coordenadas y asignas su valor a las variables "posx" y "posy".

Por otro lado no hace falta que reproduzcas el clip después que se ha cargado el contenido, ya que lo que has cargado es una imagen no un SWF.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 02 Jun 2009 03:24 pm
Gracias elchininet... a ver... te explico, es q no sé mucho de xml, entonces yo creo q es por ello, q algo estoy haciendo mal... he probado muchas combinaciones, pero la última es ésta:

En el xml (los nodos así):

Código XML :

<ampliacion> 
      <titulo>AMPLIACION NUMERO UNO</titulo>
      <image>ampliaciones/0.jpg</image>
                <posx>"680"</posx>
                <posy>"218"</posy>
   </ampliacion>


Y ya solamente al poner ésto, los tags posx e posy, sin ningún cambio en el as, ya no me muestra la imagen.
Y poniendo lo que tú me dices, tanto usando "clip" como "pantalla_mc" pues no surte efecto, no me muestra la imagen.

En el as, probé a poner ésto:

Código ActionScript :

var posix:Number;
var posiy:Number;
posix = ampliaciones_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue;
posiy = ampliaciones_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue;
mclist.onLoadInit = function(clip:MovieClip) {
   clip.x = posix; 
        clip.y = posiy; 
}

Y sigue sin tan siquiera verse la imagen... quizás el mayor error esté dentro del xml, pero no sé cómo ponerlo entonces... no sé, es que no se me ocurre cómo solucionarlo, soy muy nueva en la conexión xml-flash, y siguiendo los tutos, más o menos me entero, pero para hacer cosas nuevas... cuesta enterarse...

De nuevo gracias de verdad, espero poder solucionarlo....

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 10:18 pm
Lógico que no te funcione... lastChild es el ultimo nodo del XML y firstChild el primero no puedes tener una seríe de códigos dirigiéndose al lastChild, además lo que sacas del XML es un string y la propiedad que le das al movieClip es un número.

Te recomiendo para que no cambies el código que las posiciones las pases como atributos en el nodo de imagen:

Código XML :

<ampliacion>  
      <titulo>AMPLIACION NUMERO UNO</titulo> 
      <image posx="680" posy="218">ampliaciones/0.jpg</image> 
</ampliacion> 


De esta forma accedes a estas propeidades de la siguiente forma (no se de dónde sacas la variable _indice):

Código ActionScript :

imagen = ampliaciones_xml.firstChild.childNodes[_indice].firstChild.nodeValue;
posx = Number(ampliaciones_xml.firstChild.childNodes[_indice].attributes.posx);
posy = Number(ampliaciones_xml.firstChild.childNodes[_indice].attributes.posy);


si no comprendes esto, te recomiendo que te des una vuelta por los tutoriales y leas algo de XML de lo contrario nunca podrás enfrentar un tipo de trabajo como este.

http://www.cristalab.com/tutoriales/tutorial-de-xml-en-flash-c12l/

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 03 Jun 2009 10:48 am
Gracias elchininet... me estudiaré el tuto que me das para poder entender todo mejor...

Pero, he echo lo que me has dicho, he quitado el lastChild a la "primera linea" y si lo hago, no se me muestra la imagen, y como no se muestra, no puedo saber si los atributos x e y, han funcionado.

Dejé el lastChild para ver el tema de atributos, pero si lo hago así (dejando el lastChild), no hace caso a los atributos, vamos cómo si no estuvieran...

El _indice lo saco en el parámetro de la funcion cargarDatos, aqui:

Código ActionScript :

function cargarDatos(_indice:Number)


Todo ésto, lo he echo siguiendo el tutorial de lector de noticias xml que ahí aqui en el foro ...

Espero que podáis seguir ayudandome, pq ando perdida... mientras voy estudiando el tuto y seguir haciendo pruebas, a ver si saco algo en claro :s

Gracias...

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jun 2009 11:07 am
Crea un documento nuevo y en el primer frame pega esto:

Código ActionScript :

//---El XML como lo has posteado
var myXML:XML = new XML("<ampliacion><titulo>AMPLIACION NUMERO UNO</titulo><image posx='680' posy='218'>ampliaciones/0.jpg</image></ampliacion> ");

//---Acceder al primer nodo (titulo)
trace("titulo: " + myXML.firstChild.childNodes[0].firstChild.nodeValue);

//---Acceder al segundo nodo
trace("imagen: " + myXML.firstChild.childNodes[1].firstChild.nodeValue);

//---Aceder a las x y las y del segundo nodo
trace("posx: " + myXML.firstChild.childNodes[1].attributes.posx);
trace("posy: " + myXML.firstChild.childNodes[1].attributes.posy);


Verás que todo te lo lanzará correctamente, así que o has posteado un XML que no es verdaderamente tu XML, o no estás haciendo algo bien. Te recomiendo que primero leas el tuto y depués entres a hacer cosas como estas.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 04 Jun 2009 12:17 pm
Ok, gracias... todo ésto lo hice siguiendo ya un tutorial de aqui, pero veo que tengo que hacer otro para poder entenderlo todo, gracias por toda vuestra ayuda y tiempo... me voy a poner a estudiar el xml a ver si yo consigo sacarlo en claro.

Gracias de nuevo, habéis sido muy amables.

Por Hapki

Claber

268 de clabLevel



 

firefox

 

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