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:




April 8th, 2009 at 15:36
Massa velho!
Depois posta o link dos seus trabalhos cara!
Valeu!
April 9th, 2009 at 10:46
Show =D Pensei que não daria para fazeresta comunicação.
Abçs!
June 24th, 2009 at 14:01
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.
August 11th, 2009 at 9:45
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