Ir para conteúdo

POWERED BY:

Arquivado

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

Lucius Mendes

Como acesso variáveis de um swf carregado?

Recommended Posts

Bom dia, amigos IMasters!Estou com uma dúvida que está me chateando. Já procurei pela resposta, mas ainda não encontrei.Em actionscript 3, como faço para, após ter carregado um swf externo com loader, acessar variáveis de um movie clip carregado? Ex: carreguei "meuArquivo.swf" e dentro dele tem "meuMC", como faço para após o carregamento mudar a posição de "meuMC" quando eu bem entender?Espero ter conseguido explicar direito.Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala lucius,Você pode usar variavel global... eu uso em todos os flashsites que faço... ex:_global.link = "teste" // você poe no primeiro frame da sua timeline principal... do seu filme principal// cria outro swf e na timeline principal ou dentro de um mc você testa essa variavel que você criou no filme principal da seguinte formaif (_global.link == "teste") {trace("ok")}Com uma variavel global você pode manipular objetos de outros swfs externos.Espero ter ajudado.[]´s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o getChildByName(), veja:

 

caso você esteja mudando o valor dentro da função Event.COMPLETE, faça assim

 

 

ACTIONSCRIPT
public function onComplete(event:Event):void {

       

    event.target.content.getChildByName("meuMC").x = 100

    event.target.content.getChildByName("meuMC").y = 100

    trace("carregou")

 

}

 

 

só lembre de setar a propriedade name do movieClip que você vai alterar a pocisão para meuMC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, Eder!

 

Muito obrigado pela força!

 

Se fosse, então, com um MC, "Item", dentro do meuMC seria assim?:

 

public function onComplete(event:Event):void {			event.target.content.getChildByName("meuMC.Item").x = 100	event.target.content.getChildByName("meuMC.Item").y = 100	trace("carregou")}

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim:

 

event.target.content.getChildByName("meuMC").getChildByName("Item").x = 100event.target.content.getChildByName("meuMC").getChildByName("Item").y = 100

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como seria para eu fazer o processo inverso, ou seja, acessar variáveis externas ao child?

 

Ex:

principal.swf (na timeline tendo uma função organizar)

 

carregando

 

crianca.swf (preciso acessar pela timeline deste a função organizar do swf principal)

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz o seguinte teste já que eu tô sem o flash CS3 aqui

 

o método é o mesmo do AS2, você teria que acessar o root

 

 

de dentro do criança.swf, você faz assim

 

 

var pai = MovieClip(this.root)

pai.organizar()

ou

 

var pai = MovieClip(this.stage)

pai.organizar()

 

ou alguma variação desses :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, Eder!

 

Obrigado pela força! Você é 10 mesmo!!

 

Tentei da forma como você me falou e algumas variações, mas não consegui de forma nenhuma. Será que é de outra forma?

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui, mas pelo que vi não é tão facil como no AS2....

 

 

1º no crianca.swf eu usei esse código para chamar o método que esta no principal.swf

mas só funciona se ela NÃO estiver no 1º frame

 

ACTIONSCRIPT
// o nome da função de entre parêntese para não dar um erro na compilação

this["funcaoNoPrincipal"](11)

 

 

 

agora no principal.swf, ao carrega a criança.swf, no evento Event.COMPLETE

 

ACTIONSCRIPT
var endereco:URLRequest = new URLRequest("crianca.swf");

var carregador:Loader = new Loader();

carregador.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

carregador.load(endereco);

addChild(carregador);

 

 

 

function onComplete(event:Event):void {

 

    //muda a posição do swf carregado

    var mc = event.target.content

    //atribui a função

    mc.funcaoNoPrincipal = funcaoTeste

    trace("carregou")

}

 

 

function funcaoTeste(a:Number):void {

 

    trace(a)

}

 

 

 

talvez existe uma maneira mais fácil de fazer isso (no Flex tem a classe Application, mas não a achei no flash),

o AS3 exige uma estrutura OOP para fazer qualquer coisa nele, acredito que a forma que era feita no AS2 não era

muito estruturada, por isso não tem como fazer igual, era mais fácil, mas dava margem parar ficar bagunçado o código...

 

 

talvez se você criar alguma função Global e chame ela do criança.swf fosse melhor

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, Eder!

 

Mais uma vez, obrigado pelo apoio!

 

Encontrei no help do flash a classe ApplicationDomain, acho que o caminho para fazer isso de forma mais prática é por lá. Só que ainda não entendi como...

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, Eder!

 

Consegui de uma forma um pouco diferente e vou postar aqui para que todos possam ver. Da forma como você fez era necessário atribuir a função à child e não poderiam ser colocadas as funções no primeiro frame, neste caso não é necessário se atentar a estes detalhes:

 

Eu criei 2 swfs: superior.swf e inferior.swf (esse é a criança);

 

No superior.swf coloquei assim no 1 frame:

 

stop();

import flash.display.Loader;
import flash.net.URLRequest;

var URLreq:URLRequest = new URLRequest("inferior.swf");
var loader:Loader = new Loader();
 
function teste():void{
	trace("conseguiu!!");
}

loader.load(URLreq);
addChild(loader);

E no inferior ficaria assim:

stop();

root.parent.parent["teste"]();

Valeu pelo help!!

 

Abraço!

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.