Comunidad de diseño web y desarrollo en internet online

Función que no funciona

Citar            
MensajeEscrito el 09 Mar 2013 01:02 pm
Hola, amigos de cristalab.
Tengo un contador de tiempo en mi juego, el cual va bien. Pongo el pause en el juego (con una tecla) y se para el contador, como tiene que ser. Pero a la hora de volver al juego el contador se reinicia...le he estado dando mil vueltas al código, pero no le encuentro solución. Espero vuestra ayuda, por favor...

Aquí está el código:

Código ActionScript :

stop();
var duración:Number = 1000;
var counter = 53;// esto es igual a 52 segundos
tiempo = '00 : 53';// en un Campo de texto dinámico con variable tiempo
function contarTiempo() {
   
    min = Math.floor(counter/60);
    seg = (counter>59) ? counter-60 : counter;
    seg = (seg<=9) ? '0'+seg : seg;
    seg = (seg == 60) ? '00' : seg;
    tiempo = '0'+min+' : '+seg;
    if (counter<1) {
        clearInterval(id);// activar sonido cuando llegue aqui
        tiempo = '00 : 00'
    } else {
        counter--;
    }
   if (counter >=0 && _root.puntuación >= 220 ) {
         _root.vcam.moneda_premio._visible = true;
         _root.vcam.moneda_premio.gotoAndPlay(2);
         } else {
            _root.vcam.moneda_premio._visible = false;
            _root.vcam.moneda_premio.stop();
         }
         
}



var id:Number = setInterval(contarTiempo, duración);

function comenzarIntervalo():Void {
if (id != null) {
clearInterval(id);
}
id = setInterval(this, "contarTiempo", duración);
}
comenzarIntervalo();


y en el frame en donde está la pausa tengo esto:

Código ActionScript :

clearInterval(id);
      if (Key.getCode(80))  function() {
comenzarIntervalo();
};

Gracias por adelantado.

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2013 12:00 pm
Tal como lo tienes lo borras y lo creas inmediatamente en la función comenzarIntervalo, no lo pausas realmente. Si se reinicia el tiempo es porque se vuelve a ejecutar el código del frame donde declras counter, es decir probablemente te muevas a otro frame y luego vuelvas a este, si no quieres que pase declara la variable en un frame al que no vuelvas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Mar 2013 02:18 pm
Jorge, gracias por tu respuesta, aunque ya había dado con la solución.

Estuve varios días foreando, chateando, posteando y googleando (con su respectivo dolor de cabeza). Incluso en sueños le daba vueltas...seguramente a alguno de vosotros también le ha pasado alguna vez.
Tienes toda la razón, estaba llamando a la función desde dentro del movie clip de pausa, que tiene dos frames: juego y pausa. Simplemente pasé todo el ActionScript del crono a la raíz principal y le añadí un keylistener para la tecla de la pausa.
Para los que aún así tengan dudas posteo el código. Repito, en un frame de la raíz principal:

Código ActionScript :

var duración:Number = 1000;
var counter = 53;// esto es igual a 53 segundos
_root.vcam.tiempo_txt = '00 : 53';// en un campo de texto dinámico con variable tiempo_txt
function contarTiempo()
{

   min = Math.floor(counter / 60);
   seg = (counter > 59) ? counter - 60 : counter;
   seg = (seg <= 9) ? '0' + seg : seg;
   seg = (seg == 60) ? '00' : seg;
   _root.vcam.tiempo_txt = '0' + min + ' : ' + seg;
   if (counter < 1)
   {
      clearInterval(id);// activar sonido cuando llegue aqui
      _root.vcam.tiempo_txt = '00 : 00';
   }
   else
   {
      counter--;
   }
   if (counter >= 0 && _root.puntuación >= 220)
   {
      _root.vcam.moneda_premio._visible = true;
      _root.vcam.moneda_premio.gotoAndPlay(2);
   }
   else
   {
      _root.vcam.moneda_premio._visible = false;
      _root.vcam.moneda_premio.stop();
   }

}



var id:Number = setInterval(contarTiempo, duración);

function comenzarIntervalo():Void
{
   if (id != null)
   {
      clearInterval(id);
   }
   id = setInterval(this, "contarTiempo", duración);
}
comenzarIntervalo();
//oyente de tecla
var oyenteTecla:Object;
var teclaPe:Boolean = false;
oyenteTecla = new Object();
oyenteTecla.onKeyUp = KEYUP;
//detener el contador

function KEYUP()
{
   if (teclaPe == false)
   {
      if (Key.getCode() == 80 || _root.vcam.detener_btn.onRelease)
      {
         clearInterval(id);
         teclaPe = true;
      }
   }
   else if (teclaPe == true)
   {
      if (Key.getCode() == 80 || _root.vcam.reanudar_btn.onRelease)
      {
         comenzarIntervalo();
         teclaPe = false;

      }
   }

}
Key.addListener(oyenteTecla);


Encima, hace varios meses tuve prácticamente el mismo fallo con un sonido que quería pausar y me ayudaste tú. Volví a caer en el mismo error.

Por chachon2

41 de clabLevel



 

chrome

 

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