Ir para conteúdo

POWERED BY:

Arquivado

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

michelmfreitas

Como acessar elemento de um SWF externo?

Recommended Posts

Olá pessoal, estou com a seguinte dúvida:

 

Tenho um arquivo principal que carrego vários SWF externos, de acordo com o botão clicado. Quando carrego determinado SWF, ele contém botões que levam a outros SWF's. Como faço para acessar/adicionar propriedades desses objetos?

 

Ps.: Estou trabalhando com Orientação a Objetos e tenho um arquivo de classe (ex.: arquivo.as)

Compartilhar este post


Link para o post
Compartilhar em outros sites

variaveis publicas podem ser acessadas pela sua classe principal..

 

declare variaveis publicas nso seus swfs.

 

opa!

 

hum... acho que você não entendeu...

 

tenho um evento dentro do swf que eu carrego, tipo:

 

botao.addEventListener(MouseEvent.CLICK, _funcao)

Mas eu trabalho em um arquivo AS e chamo esse SWF que tem esse evento nele... nao da pra simplesmente eu instanciar ele no FLA e chamar no AS.

Tem um jeito, só não sei qual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bomm nesse caso...

 

você teria que disparar um evento no swf e escutar ele no AS...

 

 

exemplo:

 

botao.addEventListener(MouseEvent.CLICK, funcao)

function funcao(e:MouseEvent){
dispatchEvent(new Event("NOMEDOEVENTO"))
}

ai no seu AS

 

seuObjeto.addEventListener("NOMEDOEVENTO", funcao2)

function funcao2(e:Event){
trace("aa")
}

 

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso, qual objeto eu usaria? Ainda não consegui absorver completamente, mas entendi a utilização do evento...

 

Veja meu codigo pra entender melhor

 

Multimidia.as (carrega todos os swf externos)

package{
	
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.display.Loader;
	import flash.display.Stage;
	import flash.display.MovieClip;
	import flash.events.Event;
	
	public class Multimidia extends MovieClip{
		
		private var url:URLRequest;
		private var loader:Loader = new Loader();
				
		public function Multimidia(){
			
			conteudo.addEventListener(MouseEvent.CLICK, openUrl);
			bovinos.addEventListener(MouseEvent.CLICK, openUrl);

			loader.addEventListener("eventoClick", funcao); //seria esta a maneira correta? será este o objeto?

		
			loader.x = 216;
			loader.y = 144;
			addChild(loader);			
			
		}
		
		private function openUrl(e:MouseEvent):void{
			url = new URLRequest(e.target.name+'.swf');
			loader.unload();
			loader.load(url);
		}
                
                private function funcao(e:Event):void{
			trace('funcionou');
		}

		
	}
	
}

bovinos.swf (tem outros botões nele para invocar outros SWF's)

te_bovinos.addEventListener(MouseEvent.CLICK, _chamaEvento);

function _chamaEvento(e:MouseEvent):void{
	dispatchEvent(new Event("EventoClick"));
}

O objeto no caso seria o loader? Tentei utilizar aqui e não consegui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o lugar do addEventListener não seria no loader

 

para garantir, tem uma maneira do evento ir subindo a hierarquia até chegar no principal

 

na hora de disparar:

 

 

dispatchEvent(new Event("EventoClick", true));

 

com isso o addEventListener pode ficar na própria classe

 

public function Multimidia(){
			
			conteudo.addEventListener(MouseEvent.CLICK, openUrl);
			bovinos.addEventListener(MouseEvent.CLICK, openUrl);

			addEventListener("eventoClick", funcao);


}

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz ...

 

No momento estou sem a documentação do AS3 aqui!!

 

Mas de cabeça, lá vai:

É necessário no arquivo que será carregado, ser autorizado o acesso:

Security.allowDomain('DOMÍNIO QUE PODERÁ ACESSAR AS PROPRIEDADES PUBLICAS DESTE SWF');

Então depois disso eu acredito que você não terá problemas em utilizar as propriedades de dentro do swf carregado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem um outra solução que pode ser interessante...

 

o swf principal pode adicionar os eventos de mouse veja no codigo:

// delcarando o loader
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("swf1.swf");
// declarando um movieclip que vai receber os dados do loader
var mc:MovieClip

// carregando o swf e adicionando o evento para esperar o carregamento completarr
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completo)
loader.load(url)





function completo (e:Event) {
// adiciono o conteudo do loader(timeline) ao um movieclip para poder acessar os objetos do swf
mc = loader.content as MovieClip;
this.addChild(mc)
// agora é possivel acessar ou adicionar eventos nos botoes do swf carregado a partir o mc criado que recebeu o conteudo do loader
mc.botao.addEventListener(MouseEvent.CLICK, teste)
}



function teste (e:Event) {
	trace("funcionou")
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela boa vontade pessoal!

 

Eder, fiz como no exemplo que voce deu, mas no final o trace nao funcionou... fiz varios testes aqui nesse modelo, nao da erro, mas tb nao aciona o SWF... debuguei aqui e ele nao entra na funcao FUNCAO... ele nao entra nesta funcao, mas entra na funcao que cria o evento la no bovinos.swf

 

addEventListener("eventoClick", funcao);

public function funcao(e:Event):void{
	trace('funcionou');
}

J.Santos: Vlw chefe, mas acho que não é necessário, sendo que o projeto é um CD Multimidia.

 

André Sieiro: Não consegui implantar esse modelo... entendi como funciona, mas no meu codigo nao deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

michelmfreitas,

 

Certo, certo ... Veja o seguinte quando você carrega tudo num Loader né isso?

 

tipo:

 

var l:Loader = new Loader();
l.load(...);

Então quando você quiser acessar o conteudo deste loader use.

l.content.gotoAndStop(837);

Um exemplo ... Então assim você poderá definir propriedades... Chamar métodos... etc.

Talvez seja necessário um "type cast" para fazer certos tipos de coisa, tipo:

Object(l.content).blabalbla();

Veja se é isso que você quer pois na verdade eu não to conseguindo entender o seu objetivo mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi... eu tive a ajuda de um amigo ontem tb e ele me explicou melhor...

 

tive que criar um objeto pra ler o conteudo do swf... senao ele nao consegue acessar...

 

private var tela:String;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

private function onComplete(e:Event){
	var objetoTela:Object = loader.content;
	switch(tela){
		case 'bovinos':
		objetoTela.te_bovinos.addEventListener(MouseEvent.CLICK,openUrl);
		break;
		case 'videos':
		objetoTela.video01.addEventListener(MouseEvent.CLICK,openUrl);
		break;
	}
}

isso resolveu meu problema... agora entendi "essa parada" do conteudo do objeto... =)

 

pessoal, obrigado mesmo pela ajuda... os posts de vcs foram de grande valia... obrigado mesmo, qualquer coisa estou ai!!!

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.