Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/05/2006, 06:25
Avatar de -=ArgoN=-
-=ArgoN=-
 
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 19 años, 1 mes
Puntos: 1
Duda con codigo. (setInterval ...) [Dificultad Alta]

Hola maestros,

Queria solucionar una cosa que le estube dando muchas vueltas ayer por la noche y no consegui sacarla.
La cuestion es la siguiente:
Tengo un campo dinamico de texto en el cual introduzco noticias provinentes de un .txt. Tengo una funcion que lo que hace es almacenar en una matriz el texto fragmentado de manera que a medida que se va avanzando en la posicion de la matriz, esta va incrementando letra a letra, hasta formar el texto entero.
Hasta ahi todo me va bien, ya que uso el setInterval para recorrer una funcion a un determinado ritmo (speed) y lo que hace la funcion es ir mostrando en el texto dinamico cada una de las cadenas de las posiciones de la matriz, consiguiendo asi un efecto de escritura "digital" (se va escribiendo el texto solo).
Quien este interesado en el codigo luego se lo paso.

Pero el principal problema esta en que yo quiero que el usuario pueda ajustar la velocidad de escritura a traves de un "numeric stepper" del 0 al 100 (en %). Lo tengo ya colocado en el escenario, con el nombre de instancia: rap_ns pero me falta por hacer que cuando se modifique el valor del rap_ns la velocidad definida en el setInterval vaya cambiando a medida que cambia el valor del numeric stepper.

Vamos a pasar al fin al codigo:

Código:
speed = 100-rap_ns.value;
display_txt = function (texto) {
	clearInterval(tempo);
	// TEXT = cadena de texto cargado dinámicamente.
	TEXT = texto;
	// Llenamos cada posición de la matriz "text_ar" con las
	// letras de la posición anterior más la siguiente letra de TEXT.
	var text_ar:Array = Array();
	text_ar[-1] = "";
	for (a=0; a<=TEXT.length; a++) {
		text_ar[a] = text_ar[a-1]+TEXT.charAt(a);
	}
	c = 0;
	// Al ir aumentando la variable "c" va recorriendo la matriz "text_ar"
	// y la va mostrando en nuestro campo de texto dinámico.
	efecto = function () {
		if (c<=TEXT.length) {
			noticia_n = text_ar[c]+"_";
			if (!manu) {
				Direccion = "down";
			}
			MoverTexto_n(); // mueve el texto hacia abajo
		} else {
			noticia_n = text_ar[c-1];
			clearInterval(tempo);
		}
		c++;
	};
	cambiar = function () {
		// rap = rapidez de escritura (valor entero del 0 al 100).
		rap = rap_ns.value;
		speed = 100-rap; //hacemos que en cada instante el valor de "speed" este actualizado
		trace(speed);
	};
	tem = setInterval(cambiar, 0);
	tempo = setInterval(efecto, speed); // EN ESTE setInterval QUIERO LOGRAR QUE CADA VEZ QUE SE EJECUTE 
	// EL VALOR DE "speed" SEA DISTINTO Y POR LO TANTO RECORRA LA FUNCION "efecto" A UN DISTINTO RITMO.
};
display_txt("Hola buenos dias, esto es un texto de ejemplo para poder determinar la rapidez de escritura.")
Es decir, tenemos la funcion efecto, la funcion cambiar que actualiza el valor de speed que se corresponde al valor del numeric stepper y tenemos el setInterval para la funcion efecto, cuyo segundo parametro, el tiempo de espera, se actualiza en cada momento.

Mi pregunta es, ¿¿si el valor de "speed" se actualiza a cada instante, porque el siguiente "setInterval" no lo hace con el nuevo valor de "speed"?? Es como si se ejecutara la primera vez, con el primer valor, sin embargo tiene que ejecutarlo repetidamente para que se vaya repitiendo la funcion a la cual esta bucleando no?

Ayuda por favor, se que no es facil el tema pero intenten ayudarme pegando el codigo que puse arriba en un documento y haciendo alguna prueba, se los agradecere muchisimo

Saludos,

ArgoN

Última edición por -=ArgoN=-; 22/05/2006 a las 06:38