Estaba comenzando a hacer el mapa mental de lo que necesitaba: las variables involucradas, el ciclo de control, como mover el gato, como dejar caer los objetos, los objetos de texto para el score y el cronómetro, etc.
var score:Number = 0; var home:MovieClip = this; home.crono_txt.text = "00:00"; home.score_txt.text = score;
En eso aparece "Ab" y me dice que él estaba programando un cronómetro para un juego. ¡Caramba, que coincidencia!
Pues rápidamente me hice de un cronómetro, que corre hacia adelante. A modificarlo para que corra hacia atrás. De paso aproveché esa rutina como columna vertebral para el juego.
Pensaba utilizar la instrucción "onEnterFrame" para realizar el ciclo de control del juego, pero Tonix usó una instrucción con la que no estaba familiarizado: setInterval. Le pedí que me dijera por qué la había usado en ves de "onEnterFrame" y me explicó que de esa manera la velocidad de ejecución no depende de los "fps" del "stage". Buen punto.
iv1 = setInterval(this._parent, 'juego', 10);
La variable "iv1" es la referencia (apuntador o "puntero") al intervalo creado, que ejecutará la rutina 'juego' cada 10 milisegundos. Este intervalo se ejecutará "eternamente" hasta que le digamos "para", por lo que es importante contar con una condición que verifique cuándo se ha agotado el tiempo de ejecución.
En este juego dicha condición es cuando el cronómetro llega a 0 (cero). Un par de variables se encargan de llevar la cuenta de los minutos y los segundos.
var n:Number = 100; // para los milisegundos var seg:Number = 30; var min:Number = 1; var t:Number = 0; var tt:Number = (min*60+seg);
El tiempo del juego, después de varias pruebas con el cliente, quedó en 1 minuto y 30 segundos.
Para arrancar el cronómetro (y el juego), hay que oprimir el "mouse" sobre la cara del gato. Este es un "Movie Clip" llamado "gato_mc". Para evitar crear mas de un intervalo (al principio eso sucedía al oprimir varias veces la cara del gato), hay que deshacerse del "onRelease".
home.gato_mc.onRelease = function() { iv1 = setInterval(this._parent, 'juego', 10); delete gato_mc.onRelease; };
Y aquí la rutina del cronómetro, cortesía de Abraham:
function juego() { // muevo gato home.gato_mc._x = _xmouse-home.gato_mc._width/2; // cronometro n--; t--; if (n<0) { seg--; tt--; n = 100; } if (seg<10) { segundos = "0"+seg; } else { segundos = seg; } if (seg<0) { min--; seg = 59; } if (min<10) { minutos = "0"+min; } else { minutos = String(min); } if (min<=0 and seg<=0) { // esta es la condición para terminar el intervalo // le digo al intervalo: "¡PARA!" clearInterval(iv1); } // "dibujo" el cronómetro en la pantalla crono = minutos+":"+segundos; home.crono_txt.text = crono; }
Ok, ya tengo el cronómetro que cuenta para atrás. ¿Qué sigue?