Curso AS3

Acesso entre AVM2 (AS3) e AVM1 (AS2-1)

Fiz um trabalho PPV3D para uma agência em AS3 e o site deles estava todo em AS2, ambos SWFs precisam se comunicar, mas o AVM1 não se comunica com o AVM2.

Normalmente entre dois swf AS3 é usado a classe Loader, e o conteúdo é acessado através do atributo content que retorna o primeiro nível do swf, mas quando se trata de um AS2 sendo carregado no AS3 ele retorna um objeto AVM1Movie.

Como tudo tem uma solução, neste caso utilizei a classe LocalConnection, que mesmo com as restrições entre AVM 1 e 2 dá para trabalhar tranquilamente.

As principais restrições no carregamento de um AVM1 no AVM2 são: o _root vai retorna o escopo inicial deste SWF AS2, ele nunca vai acessar a timeline do AVM2; não é possível carregar arquivos por níveis; e o AVM1 não poderá carregar outro SWF nele mesmo.

Abaixo segue um exemplo de como utilizar o LocalConnection para este caso. Lembrando que as restrições são do AVM1 no AVM2, o LocalConnection é apenas uma forma de comunicação.

No AS3

var ld:Loader = new Loader();
ld.load(new URLRequest("avm1.swf"));
addChild(ld);
 
ld.y = 110;
 
var AVMLC:LocalConnection = new LocalConnection();
btnSend.addEventListener(MouseEvent.CLICK, function()
					{
						AVMLC.send("MYAVM", "showText", txt.text);
					});

No AS2

var AVMLC:LocalConnection = new LocalConnection();
AVMLC.connect("MYAVM");
 
AVMLC.showText = function(_texto:String)
{
	txt.text = _texto;
}

Filme do exemplo:

This movie requires Flash Player 8.

4 Responses to “Acesso entre AVM2 (AS3) e AVM1 (AS2-1)”

  1. Guilherme Says:

    Massa velho!

    Depois posta o link dos seus trabalhos cara!

    Valeu!

  2. André D´Angelo Says:

    Show =D Pensei que não daria para fazeresta comunicação.

    Abçs!

  3. Alersk Says:

    Massa mesmo. Mão na roda!

    Só q tentei fazer isso com uns arquivos do Flash Paper, e alguns deles travam as ferramentas “hand” e “select text” mas tem outros q funcionam normamente.

  4. Richard Says:

    Muito bom, tinha ouvido falar sobre local connection mas não conhecia.
    Estou tentando fazer o contrário, em as2 chamar uma função em as3, será que rola?

    Obrigado e parabéns pelo blog…
    Richard

Leave a Reply