Primero que nada, un saludo a los que siempre responden en este foro, si bien no pregunto demasiado, vengo a leerlos y siempre encuentro la respuesta.
En especial a Bandit, te he sacado el jugo, muchacho...
Gracias a todos.
Mi problema es el siguiente, Actionscript me mata, y siempre tengo problemas.
Estoy haciendo una revista digital, por supuesto que sin lucro, a pedido de un amigo y en ella cargo un SWF externo, que además carga un XML con texto y un CSS con el formato del texto.
En el primer frame del SWF tengo este codigo:
Código HTML:
//Cargar XML del editorial
editorial = new XML();
editorial.ignoreWhite = true;
editorial.onLoad = function (){
//Porcentajes y esas cosas
totalxml = editorial.getBytesTotal();
cargadoxml = editorial.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 = editorial.firstChild.childNodes.length;
cargarCSS();
}
}
//Atacheamos y posicionamos el "cargando xml"
attachMovie("carga_xml","cargando",2);
cargando._x = 250;
cargando._y = 200;
//Atacheamos la linea de abajo del todo
attachMovie("linea","linea_abajo",5000);
linea_abajo._x = 0;
linea_abajo._y = 629;
//Atacheamos la caja de fondo
//Cargamos XML
editorial.load("Editoriales/editorial.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,505,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] = editorial.firstChild.childNodes[i].attributes.titulo;
//Cogemos las urls de las noticias
urls[i] = editorial.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'>"+editorial.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 = 250;
cargando2._y = 200;
estailo.load("Editoriales/editorial.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(0x396C80);
//_root["caja"+i].micolor = "0x396C80";
par = false;
}
else{
//_root["caja"+i].colorcaja.setRGB(0x45849C);
//_root["caja"+i].micolor = "0x45849C";
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 + 160;
//Creamos la caja de texto y ponemos sus propiedades
_root["caja"+i].createTextField("texto_txt",i*37,4,3,505,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 = true;
_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'>"+editorial.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 630 sobre 0
//Empezamos por el ultimo y vamos subiendo
for (i=long; i>0; i--){
if (_root["caja"+i]._y > 630){
siguiente_y = siguiente_y - _root["caja"+i]._height + 1;
_root["caja"+i]._y = siguiente_y;
}
}
Este código, lo obtuve de alguno de uds, y fue modificado por mi, ya que el mismo tiene otra parte en la que va moviendo automaticamente el texto de arriba a abajo. Esto último lo quité para que estuviera quieto que es la idea.
Pero, si quisiera que tuviera los botones de arriba y abajo, para que el usuario, pudiera recorrer el texto y además que no se saliera de la pelicula ya que cuando el XML es largo, se va de pantalla.
El SWF donde se carga este texto, solamente tiene un MC que es un rectangulo y se llama "Fondo".
Disculpen el largo del post, y les agradezco nuevamente la ayuda.
Gustavo
Montevideo-Uruguay.