Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Rezende

Manipular MovieClip de um SWF Externo

Recommended Posts

Saudações povo!

 

Estou trabalhando com meu primeiro projeto em AS3, e apesar das dores de cabeça da migração 2/3, to gostando demais do troço.

 

Bom, tenho uma dúvida que parece simples, mais já estou o dia inteiro fuçando a net e tentando por lógica própria mais até agora nada.

 

O que quero é simples, manipular variáveis e MovieClips de um SWF exportado para o palco principal.

 

Tenho para fim de exemplo dois arquivos: o "main.swf" e o "empresa.swf"

 

- O main.swf conta com um menu e toda estrutura base do site, enquanto o empresa.swf contem todas as animações desta página especifica.

 

- Já conseguir carregar e brincar com essa interação, porem anda não consegui controlar um MovieClip do EMPRESA através do MAIN.

 

Ex: quero que ao clicar um botão para fazer a troca das páginas, esse evento que está MAIN dispare um play() em um MovieClip dentro de EMPRESA

 

 

 

 

Já tentei das seguintes formas que vi em outros foruns:

 

Tentar acessar diretamente a variável loader:

 

function abrirPagina (paginaEscolhida):void{
	var caminhoPagina:URLRequest = new URLRequest(paginaEscolhida); 
	var loader:Loader = new Loader() ;
	loader.load(caminhoPagina); 
	MovieClip(root).mcFilme.mcFilmeConteudo.mcFilmeConteudoInterno.addChild(loader);
			
}
 
function preparaTrasicao ():void{
	if(paginaAtual == "home"){
		MovieClip(root).mcFilme.mcFilmeConteudo.mcFilmeConteudoHome.play();
	}
	if(paginaAtual == "interna"){
		trace("transição intrerna x interna ativada");
		(loader.content as MovieClip).mcFilmeEmpresa.mcFilmeEmpresaConteudo.play(); //ATENÇÃO PARA ESTA LINHA
	}
}

Retorna um erro de parâmetro.

 

 

E já tentei assim tb transformar o loader em um MC para depois acessa-lo normalmente como um MC, porem a variável filme não recebe nada e acaba retornando um erro pois addChild não aceita null.

 

 

function abrirPagina (paginaEscolhida):void{
	var filme:MovieClip;  //ATENÇÃO PARA ESTA LINHA
	var caminhoPagina:URLRequest = new URLRequest(paginaEscolhida); 
	var loader:Loader = new Loader() ;
	loader.load(caminhoPagina); 
	filme = (loader.content as MovieClip);  //ATENÇÃO PARA ESTA LINHA
	MovieClip(root).mcFilme.mcFilmeConteudo.mcFilmeConteudoInterno.addChild(filme);  //ATENÇÃO PARA ESTA LINHA
			
}
 
function preparaTrasicao ():void{
	if(paginaAtual == "home"){
		MovieClip(root).mcFilme.mcFilmeConteudo.mcFilmeConteudoHome.play();
	}
	if(paginaAtual == "interna"){
		trace("transição intrerna x interna ativada");
		MovieClip(root).mcFilme.mcFilmeConteudo.mcFilmeConteudoInterno.filme.mcFilmeEmpresa.mcFilmeEmpresaConteudo.play();  //ATENÇÃO PARA ESTA LINHA
	}
}

 

E ai, to no caminho certo, ou não tem nada haver? alguém tem uma luz?

 

Julgo que deve ser algo tão bobo, e já perdi um dia atraz da solução.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tiver trabalhando com classe você faz private var loadee:MovieClip = new MovieClip;. Se tiver trabalhando no fla você faz fora de qualquer sem o private.

 

Na função que carregou empresa.swf você coloca:

loadee = MovieClip(loader.content); // tem que dizer que é MovieClip pq Loader carrega outras coisas, como imagens, e no caso daria erro.

 

E na função que recebe MouseEvent.CLICK (o botão clicado) você faz:

loadee.animar_mc.play(); //animar_mc é o botão que você quer dar play em empresa.swf

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mesmo, Lino!

 

Deixei um pouco pra traz essa tarefa pra adiantar outras coisas no projeto mais já vou tentar aplicar...

 

Forte abraço!

 

Bom... Essa etapa foi resolvida. Beleza!!!

 

Agora tenho a necessidade de fazer o inverso, ou seja, manipular o SWF principal a partir do SWF importado. :huh:

 

Alguém tem uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para uma relação direta, depende da posição no nível hierárquico da display list que seu objeto importado está. Você pode ir voltando os níveis usando parent.

 

De toda forma, é uma solução que dificulta manutenção, e deixa seu código confuso.

 

A melhor solução é concentrar seu código, de preferencia usando orientação a objetos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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