Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/05/2006, 10:26
Avatar de luistar
luistar
 
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 1 mes
Puntos: 0
Se demora en iniciar el reloj porque primero tiene que cargar el tiempo del servidor, desde que se carga la pelicula transcurre un tiempo hasta que flash solicite el time_stamp al servidor y éste le responda, debido a ello es la demora...

El controlar iteraciones con fotogramas distintos ya es cosa del pasado (AS1)
cuando en el fotograma 1 ponías las acciones y el el fotograma 2 ponias un: gotoAndPlay(1); para que vuelve a leer las acciones del fotograma anterior y así crear el 'loop', tampoco es necesario crear un nuevo objeto date para cada accion que querramos usar, osea que no tenemos que crear un objeto para los segundos otro para los minutos, horas, otro para el reloj digital y para la fecha, basta una sola vez

es mejor usar los controladores de eventos; el más usual es onEnterFrame que quiere decir 'en cada lectura de fotograma' (depende de la velocidad de fotogramas por segundo (fps) a la que esté exportada la película)

por ejemplo si queremos tener un reloj con la hora local sería así de simple:

Código:
this.onEnterFrame = function(){
	var hora_date:Date = new Date();
	hora_txt.text = hora_date.getHours()+':'+hora_date.getMinutes()+':'+hora_date.getSeconds()+':'+hora_date.getMilliseconds();
}
en este ejemplo:
en cada lectura de fotograma (onEnterFranme) de este movieClip (this) obtenemos la el tiempo local (var hora_date:Date = new Date();) en ese momento de la lectura, de esa manera tenemos siempre el tiempo actual, y lo mostramos en un campo de texto (hora_txt)

si queremos un reloj con la hora del servidor, la idea es la misma,
cada cierto tiempo consultamos el tiempo en el servidor y lo mostramos
pero imagina que nuestro reloj con hora del servidor no solo queremos que muestre segundos sino también milisegundos; si queremos tener el tiempo del servidor actual tendríamos que comunicarnos con le servidor un par de cientos de veces por segundo, ESO ES DEMASIADO!!!, aun comunicarse con el servidor una vez por segundo es bastante, sólo haría lenta nuestra página, el reloj tendría demoras y talvez saturemos el servidor xD...

por ello en vez de pedir el tiempo al servidor en cada iteración, se lo pedimos una vez y trabajamos con ella (vamos icrementando su valor el tiempo que se haya demorado en pasar de una iteración a otra).

Me explico...
Si la película está configurada a 10fps, en cada iteración tenemos que incrementar el valor del tiempo en 1/10seg (0.1 segundos o lo mismo que es 100 milisegundos) para que asi en 10 iteraciones se sumen en total un segundo....

pero aveces requerimos que nuestra pelicula este configurada a mas de 10fps, a veces a 12fps(predeterminado) o 36fps 0 48fps
por lo que tendríamos que recalcular CUÁNTO es el incremento para cada iteración...

dado ese inconveniente hay otra alternativa al onEnterFrame para hacer iteraciones, es con al función setInterval
esta función lo que haces es ejecutar otra funcíon cada cierto tiempo

con esto tendríamos un control de tiempo para cada iteración específico para nuestro reloj y no dependeríamos de los FPS
si hacemos que la iteración sea cada 1 segundo, tendríamos que sumar 1seg (1000 milisegundos) al tiempo y así tenemos las cosas mas claras y controladas

y eso es lo que hago en el reloj con hora del servidor

en resumen...
- con la hora local, basta usar onEnterFrame y obtener la hora en cada momento
- con la hora del servidor obtemos el tiempo, iteramos 1vez por segundo y sumamos 1seg al tiempo y volvemos a iterar
es lo que los direrencia


NOTA. al calcular el timepo del servidor de esa manera todo debería ir viento en popa, pero no es así, notarás que la hora del servidor tiene un retrazo de apoximadamente mmm.. 1seg por cada 5minutos xD
esto es por la capacidad de la PC's de ejecutar el codigo, algunas serán lo suficientemente potentes ejecutarlo correctamente y otras tendrán retrasos :P
para solucionarlo se podría volver a cargar cada cierto tiempo la hora actual del servidor y recomenzar el 'loop' o también podríamos hacer que el valor de incremento en cada iteración, no depende del tiempo que tarda cada iteración
sino que al tiempo original del servidor le sumamos el tiempo que lleva de cargado la pelicula menos el tiempo en que se cargo el dato del servidor
ops creo que la estoy enredando xD

saludos :D
__________________
Si digo que soy mentiroso. ¿Lo soy?

Última edición por luistar; 23/05/2006 a las 10:44