Ir para conteúdo
Project2015

Converter código em AS1 para AS3

Recommended Posts

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

var loader: Loader = new Loader();
var swfExterno: Object = new Object();

loader.load(new URLRequest("cap01.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, carregou);

function carregou(event: Event): void {
	addChild(loader);
	loader.x = 0;
	loader.y = 77;
	swfExterno = event.target.content;
	var minutesElap: Number = 0;
	var secondsElap: Number = 0;
	var minutesTot: Number = 0;
	var secondsTot: Number = 0;
	var totFrames = this.swfExterno.totalFrames;
	var curFrame = this.swfExterno.currentFrame;

	var myTimer: Timer = new Timer(1000, 0);
	myTimer.addEventListener("timer", timerHandler);
	myTimer.start();

	function timerHandler(event: TimerEvent) {
		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));

		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 = "";
		}
	}
}

Desde já agradeço a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Adhara
      Olá, eu gostaria de saber se alguém pode me dar um help. Eu estou fazendo um jogo em AS3 e por algum motivo os Hit Test Object não estão funcionando.
       
      O código é este, até onde sei não tem nenhum erro:
       
      if (this.hitTestObject(MovieClip(parent).blocodeinterrogacao)) {
                  this.y = stage.stageHeight - 450-this.height;            
                  this.gotoAndStop("parado");
                  MovieClip(parent).moeda.visible = true;
                  MovieClip(parent).blocodeinterrogacao.x = -300;
      }
      if (this.hitTestObject(MovieClip(parent).blocodeinterrogacao2)) {
                  this.y = stage.stageHeight - 450-this.height;
                  this.gotoAndStop("parado");
                  MovieClip(parent).inscrita.visible = true;
                  MovieClip(parent).blocodeinterrogacao.x = -300;
      }
       
      Se alguém puder me ajudar, desde já agradeço.
    • Por waguinho
      Bom dia!
       
      Estou com problema quando converto um arquivo do Excel com extensão XLSX para JSON javascript, o método está funcionando normalmente,
      recebo um Array com objetos, porém esse Array só vem com a primeira "ABA" do arquivo Excel, uma vez que esse arquivo Excel que estou convertendo tem 4 abas no total.
      Como faço para acessar e converter todas essas "abas" ?
      Estou usando o 
      "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.0/xlsx.full.min.js"  para conversão.  
      Segue meu código abaixo:
       
      Obrigado !!!
       
      function ajax(config) {   const xhr = new XMLHttpRequest() xhr.open(config.metodo, config.url, true) xhr.responseType = "arraybuffer"   xhr.onload = function(e) { if(xhr.status === 200) { config.sucesso(xhr.response) } else if(xhr.status >= 400) { config.erro(xhr.statusText) } } xhr.send() }  
      ajax({ url: "teste.xlsx", metodo: "GET", sucesso(resposta) {   const arraybuffer = resposta   const data = new Uint8Array(arraybuffer) const arr = []   for(let i = 0; i !=data.length; i++) { arr[i] = String.fromCharCode(data[i]) }   let bstr = arr.join("") const workbook = XLSX.read(bstr, { type:"binary" })  
      const first_sheet_name = workbook.SheetNames[0]   const worksheet = workbook.Sheets[first_sheet_name] var info = XLSX.utils.sheet_to_json(worksheet, { raw: true })   return info   }, erro(e) { console.log(e) }  
      })
    • Por weltonaparecido
      tenho um código em C++ e gostaria de fazer ele idêntico para Javascript mas não tenho conhecimento pra isso, alguem pode me ajudar?? Segue o código abaixo em C++:
       
      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>

      char * unidades[]  = { "Zero", "Um", "Dois", "Tres", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove" };
      char * dez_vinte[] = { "", "Onze", "Doze", "Treze", "Quatorze", "Quinze", "Dezesseis", "Dezessete", "Dezoito", "Dezenove" };
      char * dezenas[]   = { "", "Dez", "Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa" };
      char * centenas[]  = { "", "Cento", "Duzentos", "Trezentos", "Quatrocentos", "Quinhentos", "Seiscentos", "Setecentos", "Oitocentos", "Novecentos" };

      char * strcatb( char * dst, const char * src )
      {
          size_t len = strlen(src);
          memmove( dst + len, dst, strlen(dst) + 1 );
          memcpy( dst, src, len );
          return dst;
      }

      char * traduzir_numero( char * nome, int n )
      {
          int c = n / 100;
          int d = n / 10 - c * 10;
          int u = n - (n / 10) * 10;
          int dv = d * 10 + u;

          strcpy( nome, unidades[ u ] );
          if( n < 10 )
              return nome;
          if ( (dv > 10) && (dv < 20) )
          {
              strcpy( nome, dez_vinte[ dv - 10 ] );
          }
          else
          {
              if( u == 0 )
              {
                  strcpy( nome, dezenas[ d ] );
              }
              else
              {
                  strcatb( nome, " e " );
                  strcatb( nome, dezenas[d] );
              }
          }
          if( n < 100 )
              return nome;
          if( (d == 0) && ( u == 0 ) )
          {
              if( c == 1 )
                  strcpy( nome, "Cem" );
              else
                  strcpy( nome, centenas[c] );
          }
          else
          {
              strcatb( nome, " e " );
              strcatb( nome, centenas[c] );
          }
          return nome;
      }

      int main( int argc, char * argv[] )
      {
          int i = 0;
          char extenso[ 100 ] = {0};
          int num[] = { 0, 1, 10, 13, 100, 123, 321, 111, 333, 777, 910, -1 };
          while( num != -1 )
          {
              traduzir_numero( extenso, num );
              printf( "%d: %s\n", num, extenso );
              i++;
          }
          return 0;
          
          printf("\n\nFim...");
          
          getchar();
          
      }
       
    • Por Rafael Motta
      Alguém sabe como converter áudio ogg para mp3 com o ffmpeg?
    • Por thgsousa312
      Olá pessoal, venho aqui fazer uma pergunta um pouco vaga.. e possível converter parte do código fonte de um arquivo .dll para que eu use em meu site?
      Fiz essa pergunta pois quando visualizei o código eu pude perceber certa semelhança.
      aqui vai o codigo...

       
      internal static class Connection {     internal static SocketClient SocketClient { get; private set; }     private static int _portRangePossibility;     internal static void Init(string ip, int port,  int portRange)     {         _portRangePossibility = portRange;         SocketClient = new SocketClient(ip, port, 3000);     }     internal static bool IsConnected()     {         byte[] rfBytes = new byte[1];         return Global.ExecCommandWithOutArgs(0, ref rfBytes);     }     internal static void Disconnect()     {         Global.ExecCommandWithOutArgsWithOutReturn(Command.Quit);         SocketClient.Disconnect();     }     internal static bool Connect()     {         int range = _portRangePossibility;         for (int i = 0; i < range; i++)         {             if(SocketClient.Connect())                 return true;             SocketClient.Port++;         }         return false;     }  }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.