Ciao
Il cronometro che hai allegato è un tantino obsoleto e si basa sul frameRate del filmato e di conseguenza, se lo implementi in un altro filmato che richiede un frameRate diverso, ad esempio un gioco, avresti problemi di sincronismo e precisione.
Tempo fa ho avuto modo di studiare su un altro cronometro in ActionScript 3.0, sicuramente più preciso e basato sul tempo reale con la classe Timer e ho aggiunto quella condizione che ti serve per riprodurre un suono negli ultimi 10 secondi e lo stop del cronometro a tempo scaduto.
Per riprodurre il tutto dovresti creare 3 MovieClip e posizionali sullo stage con i loro nomi_istanza:
start_button, stop_button e reset_button.
Crea poi un campo di testo dinamico e dagli il suo nome_istanza: cronometro_txt
Importi nella libreria il suono che vuoi, spunti l'opzione "esporta per Action Script" e gli dai il suo nome Classe, nel mio esempio l'ho chiamato Drop.
Nel fotogramma aggiungi il codice:
Codice PHP:
import flash.utils.Timer;
var millesimoC:uint = 10;
var millesimoS:uint = 1000;
var millesimoM:uint = 1000 * 60;
var millesimoO:uint = 1000 * 60 * 60;
var centesimo:uint;
var secondo:uint;
var minuto:uint;
var ora:uint;
var ora_txt:String;
var minuto_txt:String;
var secondo_txt:String;
var centesimo_txt:String;
var millesimoTrascorso:uint;
var copiaDiGetTimer:uint;
var riferimentoTempo:uint;
var pausaCronometro:Boolean = false;
var cronometroAttivo:Boolean = false;
var tempo:Timer = new Timer(10,0);
var drop: Drop = new Drop ;
listenerPulsanti();
function listenerPulsanti():void
{
cronometro_txt.text = "00 : 00 : 00 : 00";
tempo.addEventListener(TimerEvent.TIMER,ticTac);
start_button.addEventListener(MouseEvent.CLICK,avviaCronometro);
stop_button.addEventListener(MouseEvent.CLICK,stopTimer);
reset_button.addEventListener(MouseEvent.CLICK,resetCronometro);
}
function ticTac(evento:TimerEvent):void
{
millesimoTrascorso = getTimer() - copiaDiGetTimer;
ora = Math.floor(millesimoTrascorso / millesimoO);
riferimentoTempo = millesimoTrascorso - ora * millesimoO;
minuto = Math.floor(riferimentoTempo / millesimoM);
riferimentoTempo = riferimentoTempo - minuto * millesimoM;
secondo = Math.floor(riferimentoTempo / millesimoS);
riferimentoTempo = riferimentoTempo - secondo * millesimoS;
centesimo = Math.floor(riferimentoTempo / millesimoC);
if (ora < 10)
{
ora_txt = "0" + ora.toString();
}
else
{
ora_txt = ora.toString();
}
if (minuto < 10)
{
minuto_txt = "0" + minuto.toString();
}
else
{
minuto_txt = minuto.toString();
}
if (secondo < 10)
{
secondo_txt = "0" + secondo.toString();
}
else
{
secondo_txt = secondo.toString();
}
if (centesimo < 10)
{
centesimo_txt = "0" + centesimo.toString();
}
else
{
centesimo_txt = centesimo.toString();
}
cronometro_txt.text = ora_txt + " : " + minuto_txt + " : " + secondo_txt + " : " + centesimo_txt;
monitorizzaTimer();
}
function monitorizzaTimer():void
{
if (minuto_txt == "02" && secondo_txt >= "50")
{
countDown();
}
if (minuto_txt == "03")
{
stopTimer();
cronometro_txt.text = "00 : 03 : 00 : 00";
}
}
function avviaCronometro(evento:MouseEvent):void
{
if (cronometroAttivo == false && pausaCronometro == false)
{
copiaDiGetTimer = getTimer();
}
else if (cronometroAttivo == false && pausaCronometro == true)
{
copiaDiGetTimer = getTimer() - millesimoTrascorso;
}
tempo.start();
cronometroAttivo = true;
}
function stopTimer(evento:MouseEvent = null):void
{
if (cronometroAttivo == true)
{
cronometroAttivo = false;
pausaCronometro = true;
tempo.stop();
}
}
function resetCronometro(e:MouseEvent):void
{
tempo.stop();
cronometro_txt.text = "00 : 00 : 00 : 00";
millesimoTrascorso = 0;
cronometroAttivo = false;
pausaCronometro = false;
}
function countDown():void
{
if (secondo > 50 && centesimo == 10)
{
drop.play();
}
}
E' settato per riprodurre un suono a ogni secondo a partire dal minuto 02 + 50 secondi e quindi stoppare il timer al minuto 03 tuttavia ... non sempre funziona e a volte ignora completamente le funzioni richieste.
Il problema è che il timer viene avviato ogni 10 millisecondi per poter gestire nel cronometro anche i decimi di secondo, un tempo troppo breve e a volte il runtime di Flash si perde quella frazione di secondo in cui la condizione per eseguire il codice risulta vera.
ciao