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

Duda Cuenta Atras Actionscript

Estas en el tema de Duda Cuenta Atras Actionscript en el foro de Flash y Actionscript en Foros del Web. Hola, estoy haciendo un cronometro de cuenta atras en flash. Es un script gratuito que encontre por la red, lo he modificado bastante, pero me ...
  #1 (permalink)  
Antiguo 04/04/2011, 04:50
 
Fecha de Ingreso: enero-2009
Mensajes: 434
Antigüedad: 15 años, 10 meses
Puntos: 5
Duda Cuenta Atras Actionscript

Hola, estoy haciendo un cronometro de cuenta atras en flash.

Es un script gratuito que encontre por la red, lo he modificado bastante, pero me queda un punto que se me escapa

Funciona todo perfecto, el unico problema es, que hay que pinchar en el boton para que comience, y yo quiero que empieze automaticamente al cargar el swf.

Dejo el codigo :

Código PHP:
// tutorial por tutoriales-flash.com ------
// ------------------------------------------
// coordenadas donde se ubicará el contador

var x0:Number 25;
var 
y0:Number 18;
// variable que almacena la fecha final
var fecha_final:Date;
// variable que almacena la fecha actual
var ahora:Date = new Date();
// variable para actualizar la cuenta con setInterval
// (dentro de función empezarCuenta)
var intervalo:uint;
// matriz donde almaceno los movieclips de los dígitos
var digitos_array:Array=new Array();
// variables que indican la separación entre
// digítos y entre grupos de dígitos
var separacion_digitos:uint 17;
var 
separacion_grupos:uint 29;
var 
contador_sp:Sprite = new Sprite();
contador_sp.x0;
contador_sp.y0;
addChild (contador_sp);

// asignamos al botón del iniciar la
// función empezarCuenta, que es la que
// inicia el proceso
iniciar_btn.addEventListener (MouseEvent.CLICKempezarCuenta);
// y aquí la función en sí
function empezarCuenta (e):void {
    
// primero comprobamos
    // si la fecha introducida es válida
    
if (esFechaValida()) {
        
trace("entro");
        
// creamos el contador con las posiciones de dígitos
        // necesarias para mostrar la cuenta atrás según la
        // fecha introducida por el usuario
        
crearContador ();
        
// detenemos  la ejecución repetida de la  funcion
        // actualizarControlador, si existiese
        
clearInterval (intervalo);
        
// ejecutamos la función actualizarControlador
        // cada 200 milisegundos, es decir 5 veces por segundo
        
intervalo setInterval(actualizarContador200);
    } else {
        
trace("no entro");
        
// si la fecha introducida no es válida paramos
        // la ejecución y reseteamos el contador a ceros
        
clearInterval (intervalo);
        if (
digitos_array.length >= 1) {
            for (var 
j:Number 0digitos_array[j]; j++) {
                
digitos_array[j].num_txt.text "0";
            }
        }
    }
}
// en esta función  calculamos la diferencia entre
// la fecha introducida por el usuario y la fecha
// actual, para poder determinar el número de dígitos
// necesarios
function crearContador ():void {
    
// inicializamos el array que contendrá los
    // clips de los dígitos
    
digitos_array = new Array();
    
// eliminamos los digitos que pueda haber dentro
    // del contador 
    
resetClip (contador_sp);
    
// mostramos los rótulos
    
quedan_mc.visible true;
    
lHoras_mc.visible true;
    
lMin_mc.visible true;
    
lSeg_mc.visible true;
    
// variable auxiliar para posicionar
    // horizontalmente los clips de los dígitos
    
var proximaPosicionX:uint 0;
    
// diferencia en segundos entre las dos fechas
    
var diffSegundos:uint Math.round((fecha_final.getTime() - ahora.getTime()) / 1000);
    
// obtengo el número de días
    
var numDias:uint Math.floor(diffSegundos 86400);
    
// si el número de días es mayor que cero 
    
if (numDias 0) {
        
lDias_mc.visible true;
        
lDias_mc.x0;
        var 
numDias_str:String numDias.toString();
        
// si el número de días es de dos  o más cifras
        // añadimos al clip contador cada uno de los clips
        // de los dígitos
        
if (numDias_str.length 1) {
            for (var 
i:Number 0numDias_str.lengthi++) {
                var 
clipCelda:MovieClip =new celdaMC();
                
// posicionamos el dígito
                
clipCelda.proximaPosicionX;
                
proximaPosicionX += separacion_digitos;
                
contador_sp.addChild (clipCelda);
                
// añadimos el dígito a la matriz
                
digitos_array.push (clipCelda);
            }
        } else {
            
// si es de una cifra sólo, añadimos un dígito con el cero antes
            
var clipDia0:MovieClip = new celdaMC();
            
clipDia0.proximaPosicionX;
            
proximaPosicionX += separacion_digitos;
            
contador_sp.addChild (clipDia0);
            
digitos_array.push (clipDia0);
            
// añadimos la cifra del número de días
            
var clipDia1:MovieClip = new celdaMC();
            
clipDia1.proximaPosicionX;
            
proximaPosicionX += separacion_digitos;
            
contador_sp.addChild (clipDia1);
            
digitos_array.push (clipDia1);
        }
        
// etiqueta dias
        
proximaPosicionX += separacion_grupos;
    } else {
        
lDias_mc.visible false;
    }
    
// calculamos el número de horas
    
var restoHoras:Number Math.round(diffSegundos 86400);
    var 
numHoras:Number Math.floor(restoHoras 3600);
    
// creamos los digitos de las horas de igual modo
    
var clipHora0:MovieClip =  new celdaMC();
    
clipHora0.proximaPosicionX;
    
lHoras_mc.clipHora0.x0;
    
proximaPosicionX += separacion_digitos;
    
contador_sp.addChild (clipHora0);
    
digitos_array.push (clipHora0);
    var 
clipHora1:MovieClip =  new celdaMC();
    
clipHora1.proximaPosicionX;
    
proximaPosicionX += separacion_digitos;
    
contador_sp.addChild (clipHora1);
    
digitos_array.push (clipHora1);
    
proximaPosicionX += separacion_grupos;
    
// creamos los digitos de los minutos de igual modo
    
var restoMinutos:Number Math.round(restoHoras 3600);
    var 
numMinutos:Number Math.floor(restoMinutos 60);
    
lMin_mc.visible true;
    var 
clipMin0:MovieClip =  new celdaMC();
    
clipMin0.proximaPosicionX;
    
lMin_mc.clipMin0.x0;
    
proximaPosicionX += separacion_digitos;
    
contador_sp.addChild (clipMin0);
    
digitos_array.push (clipMin0);
    var 
clipMin1:MovieClip =  new celdaMC();
    
clipMin1.proximaPosicionX;
    
proximaPosicionX += separacion_digitos;
    
contador_sp.addChild (clipMin1);
    
digitos_array.push (clipMin1);
    
proximaPosicionX += separacion_grupos;
    
// creamos los digitos de los segundos de igual modo
    
var numSegundos:Number Math.round(restoMinutos 60);
    
lSeg_mc.visible true;
    var 
clipSeg1:MovieClip = new celdaMC();
    
clipSeg1.proximaPosicionX;
    
lSeg_mc.clipSeg1.x0;
    
proximaPosicionX += separacion_digitos;
    
contador_sp.addChild (clipSeg1);
    
digitos_array.push (clipSeg1);
    var 
clipSeg2:MovieClip =  new celdaMC();
    
clipSeg2.proximaPosicionX;
    
contador_sp.addChild (clipSeg2);
    
digitos_array.push (clipSeg2);
}
// esta es la funcion que se ejecuta a intervalos regulares
// de tiempo y que actualiza los dígitos del contador
// con los nuevos datos de la cuenta atrás
function actualizarContador ():void {
    var 
contador_str:String "";
    var 
ahora_actualizado:Date = new Date();
    var 
diffSegundos:Number Math.round((fecha_final.getTime() - ahora_actualizado.getTime()) / 1000);
    var 
numDias:Number Math.floor(diffSegundos 86400);
    if (
numDias 0) {
        
contador_str += dosDigitos(numDias);
    }
    var 
restoHoras:Number Math.round(diffSegundos 86400);
    var 
numHoras:Number Math.floor(restoHoras 3600);
    
contador_str += dosDigitos(numHoras);
    var 
restoMinutos:Number Math.round(restoHoras 3600);
    var 
numMinutos:Number Math.floor(restoMinutos 60);
    
contador_str += dosDigitos(numMinutos);
    var 
numSegundos:Number Math.round(restoMinutos 60);
    
contador_str += dosDigitos(numSegundos);
    for (var 
j:Number 0digitos_array[j]; j++) {
        
digitos_array[j].num_txt.text contador_str.charAt(j);
    }
}
// funciones auxiliares -----
// para comprobar que la fecha introducida es válida y posterior a la actual
function esFechaValida ():Boolean {
    
fecha_final = new Date(20110423);
    
//trace(fecha_final.toString());
    
if (23<=31 &&  05<=12 && fecha_final ahora) {
        
trace("si");
        return 
true;
    } else {
        
trace("no");
        return 
false;
    }
}
// función para añadir un 0 delante en el
// caso de que sólo tenga una cifra
function dosDigitos (valor:uint):String {
    if (
valor 9) {
        return 
valor.toString();
    } else {
        return (
"0" valor.toString());
    }
}
//
function resetClip (clip:DisplayObjectContainer):void {
    while (
clip.numChildren 0) {
        
clip.removeChildAt (0);
    }


La accion se realiza en la linea 22 :

iniciar_btn.addEventListener (MouseEvent.CLICK, empezarCuenta);


Supongo que sera cambiando esa linea, pero he probado mil cosas y nada, gracias
  #2 (permalink)  
Antiguo 04/04/2011, 14:59
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 14 años, 5 meses
Puntos: 95
Respuesta: Duda Cuenta Atras Actionscript

en lugar de
iniciar_btn.addEventListener(MouseEvent.CLICK,empi ezaCuenta);

pon
addEventListener(Event.ENTER_FRAME, empiezaCuenta);

Y la funcion, solo cambiala por:

function empezarCuenta (e:Event):void


Y listo, debe funcionar.
Naturalmente quita el iniciar_btn de la pantalla y debe funcionar :)
  #3 (permalink)  
Antiguo 05/04/2011, 00:42
 
Fecha de Ingreso: enero-2009
Mensajes: 434
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Duda Cuenta Atras Actionscript

Lo he probado tal cual lo has puesto y no funciona, entra en el bucle, pero no carga los numeros, :S alguna sugerencia ?

Etiquetas: actionscript, atras
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 16:21.