Foros del Web » Creando para Internet » Flash y Actionscript »

Pausa en Actionscript

Estas en el tema de Pausa en Actionscript en el foro de Flash y Actionscript en Foros del Web. Muy buenas a todos!! Tengo un problemilla, estoy haciendo una especie de publicador de noticias en el que se leen los datos a traves de ...
  #1 (permalink)  
Antiguo 18/04/2008, 03:22
Avatar de Arwen215  
Fecha de Ingreso: enero-2007
Ubicación: Madrid
Mensajes: 57
Antigüedad: 17 años, 10 meses
Puntos: 3
Pausa en Actionscript

Muy buenas a todos!!

Tengo un problemilla, estoy haciendo una especie de publicador de noticias en el que se leen los datos a traves de un archivo xml. Tengo un mc para mostrar una imagen, y dos cajas de texto, una para el titular y otra para el cuerpo de la noticia. El caso es que me gustaria que las noticias fueran pasando solas y no a través de un boton siguiente.

Leo las noticias con un bucle for pero claro, pasa tan rapido que solo acabas viendo la última noticia. Me gustaría saber si existe alguna función que pueda poner como última instrucción de este for para que pare la ejecucion del codigo durante un tiempo y así se pueda leer la noticia antes de pasar a la siguiente, una especie de delay.

Gracias de antemano!!
  #2 (permalink)  
Antiguo 18/04/2008, 07:00
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: Pausa en Actionscript

Tienes que crear una función que enseñe una noticia a través de un parámetro (por ejemplo id_noticia). No sé cómo habrás hecho el bucle, pero el incremental debe seguir el mismo patrón.
Luego, dependiendo si programas en AS2 o AS3, usar setInterval o la clase Timer.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #3 (permalink)  
Antiguo 18/04/2008, 09:41
Avatar de Arwen215  
Fecha de Ingreso: enero-2007
Ubicación: Madrid
Mensajes: 57
Antigüedad: 17 años, 10 meses
Puntos: 3
Re: Pausa en Actionscript

Este es el codigo que tengo...

noticias.xml

Código:
<?xml version="1.0" encoding="utf-8"?>  
<raiz><noticia><datos id='1' titular='Primera Noticia' cuerpo='Esta noticia es de prueba'/></noticia><noticia><datos id='2' titular='Segunda Noticia' cuerpo='Es otra noticia de prueba'></noticia></raiz>
extrae.fla

Código:
agenda_noticias=new XML();
agenda_noticias.ignoreWhite=1;
_root.createEmptyMovieClip("foto",10);
foto._x=5;
foto._y=45;
foto.loadMovie("foto.jpg");
parsea=function(exito){
	if (exito){
		for(i=0; i<this.firstChild.childNodes.length; i++)
		{
				titular_txt.text=this.firstChild.childNodes[i].childNodes[0].attributes.titular;
				cuerpo_txt.text=this.firstChild.childNodes[i].childNodes[0].attributes.cuerpo;
				
			}
	}
	else
	{
		trace("Error");
		}
}
agenda_noticias.load("noticias.xml");
agenda_noticias.onLoad=parsea;
Yo quiero que muestre una noticia, deje un tiempo para que el usuario la lea y automaticamente cambie a la siguiente y así...

Me voy a volver loca!!
  #4 (permalink)  
Antiguo 18/04/2008, 09:59
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: Pausa en Actionscript

Código:
var id:Number;
var index:Number = 0;
agenda_noticias = new XML();
agenda_noticias.ignoreWhite = 1;
_root.createEmptyMovieClip("foto",10);
foto._x = 5;
foto._y = 45;
foto.loadMovie("foto.jpg");

function muestraNoticia() {
   titular_txt.text=this.firstChild.childNodes[index].childNodes[0].attributes.titular;
   cuerpo_txt.text=this.firstChild.childNodes[index].childNodes[0].attributes.cuerpo;
   index++;
   if (index>=agendanoticias.firstChild.childNodes.length) {
      index = 0;
   }
}

parsea=function(exito){
	if (exito){
		for(i=0; i<this.firstChild.childNodes.length; i++)
		{
			id = setInterval(this, "muestraNoticia", 10000);	
				
			}
	}
	else
	{
		trace("Error");
		}
}
agenda_noticias.load("noticias.xml");
agenda_noticias.onLoad = parsea;
Hecho así a lo rápido, que ya empieza el fin de semana....

La variable index es la que se mueve por el XML. La variable id es la que va asignada con el setInterval. Luego la función muestraNoticia hace lo mismo que tenías tú. La línea del setInterval está configurado a 10 segundos (10000 milisegundos).
Y nada más, buen fin de semana!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #5 (permalink)  
Antiguo 18/04/2008, 10:01
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: Pausa en Actionscript

Perdón, ahora que he revisado el mensajillo he visto que cometí un fallo. Dentro de la función muestraNoticia no se puede hace referencia al objeto xml por medio de this, así que cámbialo por agenda_noticias.
Más saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #6 (permalink)  
Antiguo 18/04/2008, 11:08
Avatar de Arwen215  
Fecha de Ingreso: enero-2007
Ubicación: Madrid
Mensajes: 57
Antigüedad: 17 años, 10 meses
Puntos: 3
Re: Pausa en Actionscript

En principio tu codigo no hacia nada, lo modifiqué un poco y funciona pero no me hace la parada, se ve directamente la segunda noticia :(

Código:
var id:Number;
var index:Number = 0;
agenda_noticias = new XML();
agenda_noticias.ignoreWhite = 1;

function muestraNoticia() {
   titular_txt.text=agenda_noticias.firstChild.childNodes[index].childNodes[0].attributes.titular;
   cuerpo_txt.text=agenda_noticias.firstChild.childNodes[index].childNodes[0].attributes.cuerpo;
   index++;
   if (index>=agenda_noticias.firstChild.childNodes.length) {
      index = 0;
   }
}

agenda_noticias.load("noticias.xml");
agenda_noticias.onLoad = function(exito){
	if (exito){
		
		for(i=0; i<this.firstChild.childNodes.length; i++)
		{
			id = setInterval(muestraNoticia(), 10000);	
				
			}
	}
	else
	{
		trace("Error");
		}
}
Muchas gracias de todos modos, a ver si puedes seguir echandome un cable ;)
Buen fin de semana para ti tmb!!!
  #7 (permalink)  
Antiguo 19/04/2008, 02:02
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: Pausa en Actionscript

Jo, había cometido otro fallo. Lamento haberte hecho perder tiempo; mi idea era suprimir el bucle y no lo hice...
Código:
var id:Number;
var index:Number = 0;
var agenda_noticias:XML = new XML();
agenda_noticias.ignoreWhite = 1;
_root.createEmptyMovieClip("foto",10);
foto._x = 5;
foto._y = 45;
foto.loadMovie("foto.jpg");

function muestraNoticia() {
   titular_txt.text=agenda_noticias.firstChild.childNodes[index].childNodes[0].attributes.titular;
   cuerpo_txt.text=agenda_noticias.firstChild.childNodes[index].childNodes[0].attributes.cuerpo;
   index++;
   if (index>=agenda_noticias.firstChild.childNodes.length) {
      index = 0;
   }
}

parsea=function(exito){
	if (exito){
		id = setInterval(this, "muestraNoticia", 10000);	
	} else {
		trace("Error");
	}
}
agenda_noticias.load("noticias.xml");
agenda_noticias.onLoad = parsea;
Prueba este código y cuéntame...
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #8 (permalink)  
Antiguo 21/04/2008, 02:24
Avatar de Arwen215  
Fecha de Ingreso: enero-2007
Ubicación: Madrid
Mensajes: 57
Antigüedad: 17 años, 10 meses
Puntos: 3
Re: Pausa en Actionscript

Hola Mahalo!!
Con el nuevo código que me has pasado ahora solo me muestra la primera noticia , es lógico porque solo entra en la funcion muestraNoticia una vez, la única en la que se le llama.
Todo esto se solucionaría con un botoncito para pasar la noticia pero me exigen que sea automático!!

Gracias por la ayuda, un saludo!!
  #9 (permalink)  
Antiguo 21/04/2008, 02:40
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: Pausa en Actionscript

No, no, lo que se ejecuta una vez es la declaración del setInterval, que está diciendo que cambia cada 10 segundos (10000 milisegundos). ¿Seguro que no hace el cambio? Es decir, ¿has esperado esos 10 segundos? Si no quieres esperar tanto, cambia el valor por 1000 (1 segundo).
Saludos!
PD: No desesperes que esto es fácil. Lo malo es que no puedo probarlo.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:58.