Ir para conteúdo

POWERED BY:

Arquivado

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

Naty

[Resolvido] Comunicação entre 2 swf externos

Recommended Posts

Olá gente td bom ?

 

Finalmente estou terminando este meu projeto que já faz 6 meses que estou trabalhando nele....aprendi mto, mais também estou tomando cada baile....

 

Bom minha última dúvida, acredito eu, neste projeto é:

 

Em minha home é o meu swf central, tudo o que os menus chamam aparece na home. Estou fazendo sendo tudo swf individual, pois acredito que fica mto mais organizado.

Porém acontece um problema.... na parte das galerias (Futebol, Volei, Handall, etc) cada peça de roupa irá abrir um swf individual, onde estou fazendo atraves de xml, até ai beleza. Porém com este swf aberto na Home caso eu queira navegar pelos menus não consigo fazer um unload() dele, pois está variavel esta em outro swf (seria um 3º swf) onde não consigo fazer a comunicação com a Home, onde estão os menus.

 

E agora como solucionar este problema ?? Há um jeito de acessar esta variavel Loader no swf Home, estando em um outro swf ?

 

Disponibilizo meu Fla aki ou o link do site site, mais aviso que o arquivo tem 12mb, pois é o site inteiro...

 

Bjinhos

Compartilhar este post


Link para o post
Compartilhar em outros sites

então eu li extamente este topico, porem nao entendi mto bem como fazer....

 

é só colocar este 2 codigos que você mostra ?

 

swf 1 (receptor)

var conexaoLocal_Receptor:LocalConnection = new LocalConnection(); 
conexaoLocal_Receptor = this; 
conexaoLocal_Receptor.connect("minhaConexao"); 
 
var situacaoHipotetica:Boolean = new Boolean(true); 
 
function statusSituacao(valor:boolean):void { 
 
        situacaoHipotetica = valor; 
         
        trace(situacaoHipotetica); 
 
}

swf 2 (emissor)

var conexaoLocal_Emissor:LocalConnection = new LocalConnection(); 
conexaoLocal_Emissor.send('minhaConexao','statusSituacao','false'); 
 
conexaoLocal_Emissor.addEventListener(StatusEvent.STATUS, funcionou); 
 
function funcionou(event:StatusEvent){ 
   switch (event.level) { 
      case "error": 
         trace("Houston... qqqrrrrssssss ... temos problemas!"); 
      break; 
      case "status": 
         trace("Opa a ordem foi recebida e executada Sr."); 
      break; 
      default:break; 
  } 
}

E pronto ? como chamar a minha variavel que quero trabalhar ?

 

por exemplo nesta parte do meu codigo

function clicouMenu (evt:MouseEvent) {
		ofertasLoader.visible = true
		//
		conteudoFutebolLoader.unload()
		conteudoVoleiLoader.unload()
		conteudoBasqueteLoader.unload()
		conteudoFitnessLoader.unload()		
		conteudoHandballLoader.unload()
		conteudoAtletismoLoader.unload()
		//		
		mcModalidade.visible = false
		empresaLoader.unload()
		tecnologiaLoader.unload()
		patrocinioLoader.unload()
		linhaBrasilLoader.unload()
		comemorativaLoader.unload()
		localizacaoLoader.unload()
		contatoLoader.unload()
		//
		mcOrcamento.visible = false
		conteudoOrcamentoCRColLoader.unload()
		conteudoOrcamentoCalcoesLoader.unload()
		conteudoOrcamentoMeiaoLoader.unload()
		//
		
	switch (evt.target) {
		case home:
		animamcHome.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		mcModalidade.visible = true
		break;
		
		case empresa:
		mcModalidade.visible = false
		empresaLoader.load(empresaRequest)
		mcEmpresa.addChild(empresaLoader)
    	//    
    	empresaLoader.x = 425
    	empresaLoader.y = 212.4
		//
		antiGC.push(animamcEmpresa);
		animamcEmpresa.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		//
		addChild(mcEmpresa)
		break;
		
		case linhaBrasil:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		linhaBrasilLoader.load(linhaBrasilRequest)
		mcLinhaBrasil.addChild(linhaBrasilLoader)
    	//    
    	linhaBrasilLoader.x = 0
    	linhaBrasilLoader.y = 0
		animamcLinhaBrasil.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcLinhaBrasil)
		break;
		
		case comemorativa:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		comemorativaLoader.load(comemorativaRequest)
		mcComemorativa.addChild(comemorativaLoader)
    	//    
    	comemorativaLoader.x = 0
    	comemorativaLoader.y = 0
		animamcComemorativa.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcComemorativa)
		break;
		
		case tecnologia:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		tecnologiaLoader.load(tecnologiaRequest)
		mcTecnologia.addChild(tecnologiaLoader)
    	//    
    	tecnologiaLoader.x = 0
    	tecnologiaLoader.y = 0
		//
		animamcTecnologia.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcTecnologia)
		break;
		
		case localizacao:
		mcModalidade.visible = false
		localizacaoLoader.load(localizacaoRequest)
		mcLocalizacao.addChild(localizacaoLoader)
    	//    
    	localizacaoLoader.x = 425
    	localizacaoLoader.y = 212.4
		animamcLocalizacao.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcLocalizacao)
		break;
		
		case patrocinio:
		mcModalidade.visible = false
		patrocinioLoader.load(patrocinioRequest)
		mcPatrocinio.addChild(patrocinioLoader)
    	//    
    	patrocinioLoader.x = 425
    	patrocinioLoader.y = 212.4
		animamcPatrocinio.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcPatrocinio)
		break;
		
		case contato:
		mcModalidade.visible = false
		contatoLoader.load(contatoRequest)
		mcContato.addChild(contatoLoader)
    	//    
    	contatoLoader.x = 425
    	contatoLoader.y = 212.4
		animamcContato.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		addChild(mcContato)
	}	
}

Nesta função são os menus da minha Home.swf nele eu dou unload() em td q é chamado p/ não se sobrepor... mais como o 3 swf é chamado atraves do futebol.swf nao tenho como acessa-lo pelo home.swf... ai com este teu codigo eu acesso, certo ?

Porem como manipular... ?

 

if(conteinerPagina) if(conteinerPagina.parent ) conteinerPagina.parent.removeChild(conteinerPagina);

ou

 

conteinerPagina.visible = false

ainda vou testar o que fica melhor.... rsrsr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Naty na verdade seu problema é comunicação bidirecional, vai precisar de um localconection emissor e receptor em cada ponta.

 

Não basta copiar meu código porque a lógica que você precisa é diferente... mas vamos lá vou explocar detalhadamente e se você não conseguir codificar assim que eu tiver 1 tempinho eu faço o código para você (genérico é claro).

 

Vamos lá então...

 

Para entender como o LocalConnection funciona vamos simplificar as coisa da seguinte maneira:

 

Temos 2 swf, um patrão e outro funcionário!

 

O swf patrao.swf manda o funcionario.swf realizar algumas tarefas.

 

Cada linha send do patrao.swf manda o funcionario.swf realizar alguma coisa (chama um método do funcionario.swf responsável por fazer algo)

 

Muitas vezes o patrão precisa além de mandar o funcionário fazer alguma tarefa passar algumas instruções adicionais (essas instruções são os parâmetros necessários para o funcionário realizar a tarefa que o patrão mandou fazer)

 

No seu caso seria mais ou menos assim:

 

1) O Patrão manda o funcionário fazer uma fotocópia de um documento.

2) Para isso o patrão tira o telefone do gancho e logo toca no ramal do funcionário.

3) O funcionário atende e o patrão diz corrija este memorando para mim.

4) O patrão então já havia despachado o documento pelo officeboy quando tirou o telefone do ganho, então simultaneamente a ligação o funcionário ja recebe do officeboy o memorando

5) O funcionário faz a correção do memorando.

 

O código que eu mostrei para exatamente ai, é algo do tipo mestre e escravo, não há retorno para o mestre!

 

Já no seu caso você precisa que o funcionário devolva o memorando corrigido para o patrão, entendeu o porque é bidirecional? O funcionário vai ter que fazer quase o mesmo processo que o patrão fez!!!

 

A continuação seria...

 

6) O funcionário despacha o memorando corrigido pelo officeboy e liga para o ramal do patrão.

7) Quando o patrão atende o officeboy já está com o documento na frente dele.

8) O funcionário então diz patrão pegue seu memorando já corrigido.

9) O patrão então pega o memorando corrigido.

 

então o patrão é emissor quando manda o funcionário fazer algo, nesse momento o funcionário é receptor.

depois o patrão é receptor quando o funcionário manda o patrão pegar, nesse momento o funcionário é emissor.

 

portanto você precisa de 1 localconnection com nome por exemplo patrao-funcionario e 1 localconnection com o nome funcionario-patrao, entendeu?

 

é um para cada sentido da comunicação.

 

 

Escrevi muito, espero ter sido didático o suficiente para você conseguir codificar a lógica ai, senão avisa aqui que como falei no começo eu tendo um tempinho tenho o maior prazer em escrever um código exemplo pra ti.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, nossa é bem complexo viu... rsrsr

 

Eu ainda não vi nada parecido sobre isso.... vou var uma vasculhada no google então sobre este tipo de conexão que é comunicação bidirecional....

O problema é colocar a lógica em código... isso sim é que é dificil... pq eu ainda sou uma programadora iniciante... este site que estou fazendo esta sendo o primeiro projeto dps de 2 cursos na Impacta em SP.... então realmente p/ mim é mto dificil criar a logica e colocar em codigo... qdo tenho um codigo "generico" como você mesmo diz fica mais facil "visualizar" a lógica a ser empregada...

 

Espero que você não me ache folgada... mais qdo você puder então me explica em codigo....

 

Mais já vou dando uma vasculhada no pai google...rsrsr

 

Mto obrigada pela explicação e pela atenção... vou ficar esperando então...

 

Bjinhos

Compartilhar este post


Link para o post
Compartilhar em outros sites

... é comunicação bidirecional, vai precisar de um localconection emissor e receptor em cada ponta.

 

... eu tendo um tempinho tenho o maior prazer em escrever um código exemplo.

 

Quando for possível, fica legal publicar na sessão de artigos e tutoriais do fórum.

 

Será útil a muitos usuários, e terá maior visibilidade.

 

 

 

A explicação está excelente, com um código genérico de exemplo, fica perfeito.

 

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto nada como uma busca no Google...

 

Isso seria o codigo baseado nas minhas necessidades

 

// é o loader filho da home
futebolLoader.addEventListener(MouseEvent.CLICK, clicou)
futebolLoader.addEventListener(MouseEvent.MOUSE_OVER, over)
futebolLoader.addEventListener(MouseEvent.MOUSE_OUT, out)
//
var conteudoFutebolRequest:URLRequest = new URLRequest("futebol.swf")
var conteudoFutebolLoader:Loader = new Loader
//
var conteudoFutebol:MovieClip
var mc_futebol:MovieClip = new MovieClip
//
var conteinerConteudoFutebol:MovieClip = new MovieClip
var animaConteudoFutebol:TransitionManager = new TransitionManager(conteinerConteudoFutebol)
//
conteudoFutebolLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
function onComplete(evt:Event){
   conteudoFutebol = conteudoFutebolLoader.content as MovieClip;
   addChild(conteudoFutebolLoader);
}
function handleClick(evt:Event = null) {
   try {
      conteudoFutebol.paginaLoader.alpha = 0; // add ele como transparente p/ nao atrapalhar a evoluçao dos bts - paginaLoader é a variavel dinamica que se encontra no meu arquivo "futebol.swf"
      conteudoFutebol.paginaLoader.unload() // como eu só precisava dar um unload nela...
   } catch (er:Error) {
      //trace(er.message);
   }
}

// vou aplicar no meu switch

function clicouMenu (evt:MouseEvent) {
		ofertasLoader.visible = true
		//
		conteudoFutebolLoader.unload()
		conteudoVoleiLoader.unload()
		conteudoBasqueteLoader.unload()
		conteudoFitnessLoader.unload()		
		conteudoHandballLoader.unload()
		conteudoAtletismoLoader.unload()
		//		
		mcModalidade.visible = false
		//
		empresaLoader.unload()
		maisProdutosLoader.unload()
		patrocinioLoader.unload()
		linhaBrasilLoader.unload()
		comemorativaLoader.unload()
		localizacaoLoader.unload()
		contatoLoader.unload()
		//
		orcamentoFutebolLoader.unload()
		orcamentoVoleiLoader.unload()
		orcamentoBasqueteLoader.unload()
		orcamentoFitnessLoader.unload()
		orcamentoHandballLoader.unload()
		orcamentoAtletismoLoader.unload()
		orcamentoColetesLoader.unload()
		orcamentoLBrasilLoader.unload()
		orcamentoComemorativaLoader.unload()
		orcamentoMProdutosLoader.unload()
		//
		mcOrcamento.visible = false
		//
		handleClick(); // antes de clicar e carregar o bt selecionado unload() na variavel q esta load() no stage... 
		//
	switch (evt.target) {
		case home:
		mcModalidade.visible = true
		animamcHome.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		break;
		
		case empresa:
		mcModalidade.visible = false
		animamcEmpresa.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		empresaLoader.load(empresaRequest)
		mcEmpresa.addChild(empresaLoader)
		addChild(mcEmpresa) 
    	empresaLoader.x = 425
    	empresaLoader.y = 212.4		
		break;
		
		case linhaBrasil:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		animamcLinhaBrasil.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		linhaBrasilLoader.load(linhaBrasilRequest)
		mcLinhaBrasil.addChild(linhaBrasilLoader)
		addChild(mcLinhaBrasil)    
    	linhaBrasilLoader.x = 0
    	linhaBrasilLoader.y = 0
		break;
		
		case comemorativa:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		animamcComemorativa.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		comemorativaLoader.load(comemorativaRequest)
		mcComemorativa.addChild(comemorativaLoader)
    	addChild(mcComemorativa) 
    	comemorativaLoader.x = 0
    	comemorativaLoader.y = 0
		break;
		
		case maisProdutos:
		ofertasLoader.visible = false
		mcModalidade.visible = false
		animamcMaisProdutos.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		maisProdutosLoader.load(maisProdutosRequest)
		mcMaisProdutos.addChild(maisProdutosLoader)
    	addChild(mcMaisProdutos)
    	maisProdutosLoader.x = 0
    	maisProdutosLoader.y = 0
		break;
		
		case localizacao:
		mcModalidade.visible = false
		animamcLocalizacao.startTransition ({type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		localizacaoLoader.load(localizacaoRequest)
		mcLocalizacao.addChild(localizacaoLoader)
    	addChild(mcLocalizacao) 
    	localizacaoLoader.x = 425
    	localizacaoLoader.y = 212.4
		break;
		
		case patrocinio:
		mcModalidade.visible = false
		animamcPatrocinio.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		patrocinioLoader.load(patrocinioRequest)
		mcPatrocinio.addChild(patrocinioLoader)
    	addChild(mcPatrocinio)  
    	patrocinioLoader.x = 425
    	patrocinioLoader.y = 212.4
		break;
		
		case contato:
		mcModalidade.visible = false
		animamcContato.startTransition ({ type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut})
		contatoLoader.load(contatoRequest)
		mcContato.addChild(contatoLoader)
    	addChild(mcContato) 
    	contatoLoader.x = 425
    	contatoLoader.y = 212.4
		break;
	}	
}



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.