Comunidad de diseño web y desarrollo en internet online

Ayuda cronometro

Citar            
MensajeEscrito el 31 Ago 2008 02:30 pm
Hola, soy relativamente nuevo con esto del flash, la version de flash que tengo es Flash MX 2004. Estoy haciendo un cronometro para empezar a coger majeno con flash. Pero tengo un problema, y es que no se como hacer para que se inicie i se pare el timpo con la misma tecla, en este caso la barra espaciadora. He intentado hacer algo pero no me acaba de funcionar del todo, porque el tiempo no se para solo seenciende. Os dejo el actionsrpit de todo el cronometro y me decis en que he fallado, para que pueda hacerlo parar cn la misma tecla. Muchas gracias.

Código :

var tecla_s:Number;
var tecla_p:Number;
var tecla_r:Number;
var ini:Number;
ini=1

_root.pausebutton._visible = 0;
// 
function restartTimer() {
   hours = "00";
   minutes = "00";
   seconds = "00";
   milli = "00";
   buttonPressTime = getTimer()/1000-pauseLength;
   pause();
}
// 
function pause() {
   pauseTime = getTimer()/1000;
   timing = false;
}
// 
function unpause() {
   unpauseTime = getTimer()/1000;
   pauseLength = (unpauseTime-pauseTime)+pauseLength;
   timing = true;
}
//
_root.onEnterFrame = function() {
   totalTime = getTimer()/1000-pauseLength;
   goTime = totalTime-buttonPressTime;
   // 
   if (timing) {
      hours = Math.floor(goTime/3600);
      minutes = Math.floor((goTime/3600-hours)*60);
      seconds = Math.floor(((goTime/3600-hours)*60-minutes)*60);
      milli = Math.floor((gotime-(seconds+(minutes*60)+(hours*3600)))*100);
      if (seconds<10) {
         seconds = "0"+seconds;
      }
      if (minutes<10) {
         minutes = "0"+minutes;
      }
      if (hours<10) {
         hours = "0"+hours;
      }
      if (milli<10) {
         milli = "0"+milli;
      }
   }
};
// Aquí es donde fallo
if(timing) {
      pausebutton.onKeyDown = function() {
         tecla_p=Key.getCode()
         if (tecla_p==32 && ini==0) {
            pause();
            unpausebutton._visible = 1;
            pausebutton._visible = 0;
            ini=1
         }
      }
   }else {
      unpausebutton.onKeyUp=function() {
         tecla_s=Key.getCode()
         if (tecla_s==32 && ini==1) {
            unpause();
            pausebutton._visible = 1;
            unpausebutton._visible = 0;
            ini=0
      }
   }
}
//Hasta aquí
reset.onKeyDown = function() {
   tecla_r=Key.getCode()
   //trace ("parado "+tecla_p);
   if (tecla_r==82) {
      //trace ("eYY");
      restartTimer();
      unpausebutton._visible = 1;
      pausebutton._visible = 0;
   }
}

Key.addListener(pausebutton);
Key.addListener(unpausebutton);
Key.addListener(reset);

Por Davcom

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ago 2008 05:20 pm
Mira la condición que tienes puesta chequeando si timing es true o false, se ejcuta solamente una vez, a no ser que estés haciendo un loop en los frames con ese código, pero de estar haciéndolo los eventos de las teclas no deben estar en una condición porque sino la acción queda solamente en uno de los dos, cuando en realidad debe estar a la vez en los dos, también tienes varios listener capturando cuando se presione una tecla cuando en realidad lo puedes resolver sólo con uno, por otra parte para este tipo de trabajos es mejor utilizar setIntervals que onEnterFrames, ya que los primeros se pueden detener y comenzar muy fácilmente.

Bueno tomando tu mismo código y modificándolo un poco debe quedar algo como esto, pégalo en un documento nuevo en el primer frame y observa como se restablece el cronómetro con "R" y se pausa o continúa el cronómetro con "SPACE":

Código ActionScript :

//---Crear un texto
var crono:TextField = this.createTextField("crono", this.getNextHighestDepth(), 10, 10, 0, 0);

with(crono){   
   autoSize = true;
   selectable = false;   
}

//---Función de clacular el tiempo
function setTime():Void{
   
   var rango:Number = startBackup - pauseBackup;
   var time:Number = (getTimer() - rango - restartBackup)/1000;
   
   var hours:Number = Math.floor(time/3600);
   var minutes:Number = Math.floor((time/3600-hours)*60);
   var seconds:Number = Math.floor(((time/3600-hours)*60-minutes)*60);
   var milli:Number = Math.floor((time-(seconds+(minutes*60)+(hours*3600)))*100);
   
   var h:String = (hours < 10) ? "0" + hours : hours;
   var m:String = (minutes < 10) ? "0" + minutes : minutes;
   var s:String = (seconds < 10) ? "0" + seconds : seconds;
   var ms:String = (milli < 10) ? "0" + milli : milli;

   crono.text = h+":"+m+":"+s+":"+ms;

};

//---Crear las funciones que controlan al cronómetro
var intervalo:Number;
var pausa:Boolean = false;
var pauseBackup:Number = 0;
var startBackup:Number = 0;
var restartBackup:Number = 0;

//---Comenzar el intervalo
function startTimer():Void{   
    intervalo = setInterval(setTime, 16);   
}

//---Pausar el intervalo
function pauseTimer():Void{   
   clearInterval(intervalo);   
}

//---Reiniciar el cronómetro
function restartTimer():Void{   
   if(!pausa){
      pauseBackup = 0;
      startBackup = 0;   
      restartBackup = getTimer();
   }
}

//---Funciones de presionar las teclas
var listener:Object = new Object();

listener.onKeyDown = function():Void{
   
   switch(Key.getCode()){
      
      case 82: //---Tecla R
         restartTimer();      
      break;
      
      case Key.SPACE: //---Tecla Espacio
         if(!pausa){
            
            pauseBackup += getTimer();                        
            pauseTimer();
            pausa = true;
            
         }else{
            
            startBackup += getTimer();                        
            startTimer();
            pausa = false;
            
         }      
      break;
      
   }
   
}

Key.addListener(listener);

//---Comenzar a ejecutar el cronómetro
startTimer();

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Sep 2008 09:52 am
Muchisimas gracias elchininet, por todo, a parte de corregir el fallo que tenia con las teclas, has mejorado todo el srcipt entero. Seguiré practicando y espero mejorar con el tiempo.

Por Davcom

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.