Aca les dejo el Action para que lo puedan ver las variables que se utilizan, ya que todo se hace por acction, tanto las cajas los textos incluso la posicion de las mismas luego que se cumple un ciclo, de arriba hacia abajo o vice versa. El codigo esta comentado para facilitar la busqueda.
Código :
stop(); //Cargar XML de las noticias noticias = new XML(); noticias.ignoreWhite = true; noticias.onLoad = function (){ //Porcentajes y esas cosas totalxml = noticias.getBytesTotal(); cargadoxml = noticias.getBytesLoaded(); porcentajexml = Math.round((cargadoxml/totalxml)*100); //Si esta cargado del todo if (porcentajexml >= 100) { //Borramos el cargando removeMovieClip(cargando); //Shortcuts del XML notis_puerto = new Array(); titulo = new Array(); urls = new Array(); //Cogemos el numero de noticias long = noticias.firstChild.childNodes.length; cargarCSS(); } } //Atacheamos y posicionamos el "cargando xml" attachMovie("carga_xml","cargando",2); cargando._x = 45; cargando._y = 94; //Atacheamos la linea de abajo del todo attachMovie("linea","linea_abajo",5000); linea_abajo._x = 0; linea_abajo._y = 329; //Atacheamos la caja de fondo //Cargamos XML noticias.load("noticias.xml"); /*-------------------------------------------------------------------------------*/ /*--------------------- FUNCION PARA CARGAR LA HOJA CSS --------------------*/ /*-------------------------------------------------------------------------------*/ function cargarCSS(){ //Creamos la hoja de estilo estailo = new TextField.StyleSheet(); //Cuando este cargando... estailo.onLoad = function(){ //Porcentajes y esas cosas totalcss = estailo.getBytesTotal(); cargadocss = estailo.getBytesLoaded(); porcentajecss = Math.round((cargadocss/totalcss)*100); //Si esta cargado del todo if (porcentajecss >= 100) { //Borramos el cargando removeMovieClip(cargando2); //Una vez esta cargada la CSS ya podemos saber cuantas lineas hay //por cada caja de texto //Creamos un clip y un campo de texto temporales _root.createEmptyMovieClip("temp_mc", 7); //Al campo de texto le ponemos el mismo tamaño de ancho que va a haber en //el de verdad. Le ponemos alto 16, que es lo que mide una linea. Así //podemos saber el número de líneas que tenemos. temp_mc.createTextField ("notis_txt",8,-150,-20,168,16); //Ponemos las propiedades a nuestro campo de texto nuevo temp_mc.notis_txt.multiline = true; temp_mc.notis_txt.wordWrap = true; temp_mc.notis_txt.html = true; for (i=0; i<long; i++){ //Cogemos los titulos de las noticias titulo[i] = noticias.firstChild.childNodes[i].attributes.titulo; //Cogemos las urls de las noticias urls[i] = noticias.firstChild.childNodes[i].attributes.urls; //Cogemos el texto y lo ponemos en la caja de texto temporal temp_mc.notis_txt.htmlText = "<p class='tit'>"+titulo[i]+"</p><br><p class='txt'>"+noticias.firstChild.childNodes[i].firstChild+"</p>"; //Cogemos el numero de lineas por texto notis_puerto[i] = temp_mc.notis_txt.maxscroll-1; } //Eliminamos el clip temporal removeMovieClip(_root["temp_mc"]); //Montamos las noticias montarNoticias(); } } attachMovie("carga_css","cargando2",3); cargando2._x = 45; cargando2._y = 94; estailo.load("noticias.css"); } /*-------------------------------------------------------------------------------*/ /*--------------------- FUNCION PARA MONTAR LAS NOTICIAS -------------------*/ /*-------------------------------------------------------------------------------*/ function montarNoticias(){ par = true; for (i=0; i<long; i++){ //Ponemos la caja _root.attachMovie ("caja_info","caja"+i,i*10); //Creamos el color _root["caja"+i].colorcaja = new Color(_root["caja"+i].fondo.fondocolor); //Le damos una altura igual a 16 por el numero de lineas que tenga _root["caja"+i].fondo._height = 16 * notis_puerto[i]; //Pintamos la caja if (par == true){ _root["caja"+i].colorcaja.setRGB(0xEEEEEE); _root["caja"+i].micolor = "0xEEEEEE"; par = false; } else{ _root["caja"+i].colorcaja.setRGB(0xFFFFFF); _root["caja"+i].micolor = "0xFFFFFF"; par = true; } //Si no existe altura, le damos 0 y asi se posiciona la primera caja //en y=0 if (altura == undefined){ altura = 0; } //Si existe, le damos una altura igual, a: //"altura acumulada" = "altura acumulada" + "altura anterior clip" else{ altura = altura + _root["caja"+(i-1)].fondo._height; } //Posicionamos la caja _root["caja"+i]._x = 0; _root["caja"+i]._y = altura; //Creamos la caja de texto y ponemos sus propiedades _root["caja"+i].createTextField("texto_txt",i*37,2,1,168,16 * notis_puerto[i]); _root["caja"+i].texto_txt.html = true; _root["caja"+i].texto_txt.multiline = true; _root["caja"+i].texto_txt.wordWrap = true; _root["caja"+i].texto_txt.border = false; _root["caja"+i].texto_txt.selectable = false; _root["caja"+i].direc_url = urls[i]; //Atacheamos al texto la hoja CSS _root["caja"+i].texto_txt.styleSheet = estailo; //Ponemos el titulo _root["caja"+i].texto_txt.htmlText = "<p class='tit'>"+titulo[i]+"</p><br>"; //Ponemos los textos de las noticias _root["caja"+i].texto_txt.htmlText += "<p class='txt'>"+noticias.firstChild.childNodes[i].firstChild+"</p>"; } //Mostramos la pestañita attachMovie("pestana","pestanita",2000); pestanita._x = 0; pestanita._y = 0; siguiente_y = 0; y_arriba = 0; //Posicionamos todos los clips por debajo de 330 sobre 0 //Empezamos por el ultimo y vamos subiendo for (i=long; i>0; i--){ if (_root["caja"+i]._y > 330){ siguiente_y = siguiente_y - _root["caja"+i]._height + 1; _root["caja"+i]._y = siguiente_y; } } //Una vez esta todo montado movemos las noticias moverNoticias(); } /*-------------------------------------------------------------------------------*/ /*--------------------- FUNCION PARA MOVER LAS NOTICIAS --------------------*/ /*-------------------------------------------------------------------------------*/ function moverNoticias(){ //Si es la primera vez forzamos el movimiento, si no empiezan paradas las cajas if (primera_vez == undefined){ //Creamos el evento y se empiezan a mover las cajas _root.onEnterFrame = function(){ for (i=0; i<long; i++){ //Si la caja llega a abajo del todo if (_root["caja"+i]._y > 330){ y_arriba = 0; //Calculamos donde hay que posicionar el clip que llega abajo for (j=0; j<long; j++){ //Todos los clips que esten por encima de 0 if (_root["caja"+j]._y < 0){ //Cogemos la posicion y que haya mas arriba y_actual = _root["caja"+j]._y; if (y_actual < y_arriba){ y_arriba = y_actual; } } } //Lo posicionamos arriba, siendo esta posicion: //"y del clip actual" = "posicion del clip de mas arriba" - "altura del clip actual" + 1; _root["caja"+i]._y = y_arriba - _root["caja"+i]._height + 1; } //Hacemos que vayan bajando las cajas _root["caja"+i]._y += 1; } } primera_vez = false; } /***************************************************************************/ //"el_fondo" controla a cada fotograma si estamos o no encima de las noticias el_fondo.onEnterFrame = function(){ for (i=0; i<long; i++){ //Si clicamos en la caja, vamos a la direccion "x" _root["caja"+i].onPress = function(){ getURL (this.direc_url, "_blank"); } //Si nos ponemos encima de la caja, eliminamos el evento y se para _root["caja"+i].onRollOver = function(){ //Iluminar this.colorcaja.setRGB(0xCDFBFE); delete _root.onEnterFrame; } //Si nos salimos de las cajas, se empieza a mover otra vez _root["caja"+i].onRollOut = function(){ //Pintamos la caja con el color anterior this.colorcaja.setRGB(this.micolor); //Creamos el evento y se empiezan a mover las cajas _root.onEnterFrame = function(){ for (i=0; i<long; i++){ //Si la caja llega a abajo del todo if (_root["caja"+i]._y > 330){ y_arriba = 0; //Calculamos donde hay que posicionar el clip que llega abajo for (j=0; j<long; j++){ //Todos los clips que esten por encima de 0 if (_root["caja"+j]._y < 0){ //Cogemos la posicion y que haya mas arriba y_actual = _root["caja"+j]._y; if (y_actual < y_arriba){ y_arriba = y_actual; } } } //Lo posicionamos arriba, siendo esta posicion: //"y del clip actual" = "posicion del clip de mas arriba" - "altura del clip actual" + 1; _root["caja"+i]._y = y_arriba - _root["caja"+i]._height + 1; } //Hacemos que vayan bajando las cajas _root["caja"+i]._y += 1; } } } } } }
Mas detalles.
El lector es de 330 px de alto y 170 px de ancho. Probe modificando algunos MC que son para las cajas que contienen los textos y su punto de registro estaba en la parte superior izquierda por la parte inferior izquerda pero aun asi no resulta, se siguen montando, incluso despues de merter mano mucho rato las noticias no subian hasta el 0 si no que llegaban hasta el pixel 330 y empezaba nuevamente el ciclo.
Si necesitan mas informacion con gusto la dare.
Muchisimas gracias de antemano.
Saludos.