Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Necessito modificar esse código feito em 2008 com Flash MX e AS1 para o Flash Professional 2015 com AS3, porém, não tenho conhecimento de orientação a objetos e AS3. Esse código abre arquivos swf externos para um palco principal em um movieclip e aparece o progresso dos frames em tempo (00:00/00:00) tempo decorrido/tempo total bem como uma barra de progresso. Não estou conseguindo fazer funcionar a barra de progresso e nem o tempo. Já andei lendo sobre a função timer, UILoader, Loader, porém não consegui aplicar nesse código em questão:
_global.dados = 1;
var loadingCall:Number = setInterval(preloadSite, 250);
var loadingCalls:Number = setInterval(times, 1000);
bt_avancar.onPress = function() {
if (dados<7) {
dados++;
informar(dados);
}
};
bt_voltar.onPress = function() {
if (dados>1) {
dados--;
informar(dados);
}
};
if (dados>7) {
dados = 0;
}
function preloadSite() {
if (dados < 2) {
progressbar._width = 0 }
else {
loaded = Math.round(_root.mclip._currentframe);
total = Math.round(_root.mclip._totalframes);
percent = loaded/total
progressbar._width = percent*487;
if (loaded >= total) {
clearInterval(loadingcall);
}
if (loaded <= 1) {
progressbar._width = 0
}
}
}
function times () {
minutesElap = Math.floor((_root.mclip._currentframe)/12/60);
secondsElap = Math.floor((_root.mclip._currentframe/12)-(minutesElap*60));
minutesTot = Math.floor((_root.mclip._totalframes)/12/60);
secondsTot = Math.floor((_root.mclip._totalframes/12)-(minutesTot*60));
if (secondsTot <> 0) {
contagem.text = (minutesElap < 10 ? "0" + minutesElap : minutesElap) + ":" + (secondsElap < 10 ? "0" + secondsElap : secondsElap) + "/" + (minutesTot < 10 ? "0" + minutesTot : minutesTot) + ":" + (secondsTot < 10 ? "0" + secondsTot : secondsTot);
}
else {
contagem.text = ""
}
}
bt_sair.onRelease = function () {
fscommand("quit");
}
function informar () {
switch (dados) {
case 2:
mclip.loadMovie("cap01.swf");
break;
case 3:
mclip.loadMovie("cap02.swf");
break;
case 4:
mclip.loadMovie("cap03.swf");
break;
default:
mclip.unloadMovie();
contagem.text = "";
}
}
:rolleyes:Consegui fazer com que o tempo acompanhe a duração do swf externo, porém, o único problema é que, a cada troca de cena do swf externo, o contador reinicia novamente. Preciso que seja contínuo até o final do arquivo swf. Alguém tem alguma sugestão?
var swfLoader:Loader = new Loader();
var swfFile:URLRequest = new URLRequest("cap01.swf");
var currentSWF:MovieClip = new MovieClip();
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadedHandler);
function swfLoadedHandler(e:Event):void {
currentSWF = MovieClip(swfLoader.content);
currentSWF.addEventListener(Event.ENTER_FRAME , contador);
}
function contador(e:Event):void {
var minutesElap:int;
var secondsElap:int;
var minutesTot:int;
var secondsTot:int;
var totFrames:int = currentSWF.totalFrames;
var curFrame:int = currentSWF.currentFrame;
minutesElap = Math.floor((curFrame)/12/60);
secondsElap = Math.floor((curFrame/12)-(minutesElap*60));
minutesTot = Math.floor((totFrames)/12/60);
secondsTot = Math.floor((totFrames/12)-(minutesTot*60));
contagem.text = (minutesElap < 10 ? "0" + minutesElap : minutesElap) + ":" + (secondsElap < 10 ? "0" + secondsElap : secondsElap) + "/" + (minutesTot < 10 ? "0" + minutesTot : minutesTot) + ":" + (secondsTot < 10 ? "0" + secondsTot : secondsTot);
}
swfLoader.load(swfFile);
addChild(swfLoader);Lendo o help da Adobe descobri que: "se o clipe de filme tiver várias cenas, esse valor será o número do quadro na cena atual", então, em cada nova cena, ele reiniciava o currentFrame como 1. Bastou criar uma variável que guardasse o valor dos frames da cena anterior e somasse com os frames da nova cena.
Segue o código para auxiliar quem também está tendo essa dificuldade:
//Variáveis necessárias:
var cenanome:Scene;
var num_frames:int = 0;
var curFrame:int = 0;
//Após carregado o swf externo:
cenanome = mclip.currentScene;
var cenanome2:Scene = mclip.currentScene;
//condição:
if (cenanome.name != cenanome2.name) {
num_frames = curFrame;
cenanome = cenanome2;
}
//Somo o valor dos frames da cena anterior com a atual na função enterframes:
curFrame = num_frames + mclip.currentFrame;
Obrigado a todos que leram meu código e, de alguma forma, analisaram para tentar me auxiliar na resolução desse problema.
O mais próximo que consegui chegar foi de carregar o swf externo e do totalFrames trazer o resultado esperado, porém, o contador de tempo fica parado (00:00/07:25). De acordo com o passar dos frames ele deveria ir progredindo (ex: 01:12/07:25).
Segue o código (desculpem não ter nenhuma noção de orientação a objeto aqui):
import flash.display.MovieClip
import flash.display.Loader
Desde já agradeço a atenção.