Autor: Rodrigo Gonçalves
Flash CS3
Versão AS: ActionScript 3.0
Versão do Player: Flash Player 9
Package: flash.display
Classe: public class Loader
Dificuldade: conhecimentos básicos de funcionamento do Flash, Actionscript 3.0 e lógica de programação.
Fala galera, tranqüilo?!
Vamos ver uma maneira de carregar imagem externa na versão Actionscript 3.0.
Download: No final deste tópico existe um arquivo de exemplo para download.
Introdução
No AS3(ActionScriprt 3.0) não utilizamos mais a função "loadMovie()" ou MovieClipLoader() para carregar imagens externas, como fazÃamos na versão AS2(ActionScriprt 2.0).
No AS3 devemos utilizar basicamente duas classes pra funcionar: Classe Loader e URLRequest().
A Classe Loader() é utilizada para carregar arquivos SWF´s ou imagem (JPG, PNG ou GIF "não animados").
A Classe URLRequest() é utilizada para armazenar endereço de um arquivo externo.
Sugestão:
Vale a pena dar uma olhada na página da Adobe® ActionScript 2.0 Migration e conferir a migração e diferenças entre o AS2 para o AS3.
Continuando…
Obs: Lembra-se, você precisa da versão do Flash CS3(ou superior) da Adobe para poder trabalhar com a versão de código AS3.
Para carregar uma imagem externa com AS3.
Abra um Novo documento flash e escolha a versão Actionscript 3.0.
No 1º keyframe(quadro) da 1º camada(layer), abra o painel de Actions (atalho F9).
1º linha, digite:
1 | var carregarImg:Loader = new Loader(); |
A classe Loader() é responsável por carregar imagens e filmes externos no AS3.
Na 1º linha, criamos uma variável com nome de instância "carregarImg" do tipo Loader da classe Loader().
Quando falamos de "Instância", pense que é apenas um Objeto que faz referência de algo(outro Objeto). No nosso caso "instância" faz refrência a uma Classe e conseguimos ter acesso a propriedades, métodos e eventos da classe.
2º linha, digite:
2 | var enderecoImg:URLRequest = new URLRequest("Coloque aqui o endereço da imagem"); |
A classe URLRequest() é responsável por armazenar endereços de arquivos externos no AS3. No nosso caso será um endereço de uma imagem.
Na 2º linha seguinte, criamos uma variável com nome de "enderecoImg" do tipo URLRequest da classe URLRequest().
O endereço do arquivo externo pode ser:
- Absoluto: "http://seu_site.com/minha_pasta/arquivo.extensão_imagem";
- Relativo: "minha_pasta/arquivo.extensão_imagem".
O endereço deverá estar entre aspas duplas ou simples, pois a classe URLRequest solicita valor do tipo String.
A seguir, após termos definido o endereço da imagem, e criado nosso Loader, podemos usar o método Loader.load() "variavel_Loader.load(variavel_URLRequest);
3º linha, digite:
3 | carregarImg.load(enderecoImg); |
Pronto! Seu objeto já foi criado e está pronto pra ser carregado. Faça o teste. "Control > Test Movie" (atalho Ctrl + Enter).
Provavalmente se você testou até aqui, não viu nada. Não é? Porquê isso acontece?
Após definir endereço da imagem pelo com classe URLRequest(), e fazer o carregamento do arquivo pelo método Loader.load(), devemos obrigatoriamente usar o método addChild().
O método addChild() é como uma "caixa" que recebe qualquer elemento visual criado com ActionScript (texto, video, movieclip, sprite, imagens, etc). Se está usando código pra criar ou mostrar algum objeto que será do tipo visual(seja vindo da biblioteca ou externamente), lembra-se de usar o método addChild pra mostrar o conteúdo criado no stage, do contrário, o objeto será criado e estará na memória do computador mas não será mostrado no Flash Player.
Então vamos adicionar a linha…
4º linha, digite:
4 | addChild(carregarImg); |
Agora sim. Teste novamente. "Control > Test Movie" (atalho Ctrl + Enter) para ver a imagem carregada no stage.
Você verá que a imagem carrega no eixo X e Y com valor 0 (zero). Ou seja, a imagem carrega no canto superior esquerdo do seu stage.
Seu código completo deve ter ficado algo parecido:
1 2 3 4 | var carregarImg:Loader = new Loader(); var enderecoImg:URLRequest = new URLRequest("Coloque aqui o endereço da imagem"); carregarImg.load(enderecoImg); addChild(carregarImg); |

Imagem 1: painel Actions:
Agora que sabemos que a variável "carregarImg" já está sendo visualizada no palco. Você pode controlar via Actionscript (antes do addChild você também poderia configurar), por exemplo a posição em pixels no eixo X e Y, alpha (transparência), rotation (rotação), scaleX e ScaleY, entre outros métodos, propriedades e parâmetros. Ex.: Ficando algo assim:
carregarImg.x = 100 // posição em pixels da imagem externa no eixo x; carregarImg.y = 100 // posição em pixels da imagem externa no eixo y; carregarImg.alpha = 0.5 // valor em alpha(transparência) digitar valor entre 0 e 1. Onde 0(total transparência) e 1(total opacidade);
Caso queira adicionar uma imagem dentro de um MovieClip especÃfico.
Obs: o MovieClipe pode ser vazio ou não. Se tiver algum conteúdo, certifique-se que o "ponto de Registro"(Registration) esteja no lugar certo, no nosso caso no "canto superior esquerdo".
É a partir do "ponto de Registro" que uma imagem/filme será carregado.
A Imagem abaixo mostra como pode ficar sua configuração de movie clip e nome de instância, caso esteja seguindo estes passos da programação citados anteriormente.
O MovieClip
é apenas um "retangulo na cor Preta" que converti em um SÃmbolo do tipo "MovieClip". Ou se preferir poderá criar um MovieClipe Vazio "Insert New Symbol…"(Ctrl + F8).

Imagem 2: convertendo uma imagem em sÃmbolo, configurando e inserindo um nome de instância:
1 - Converta uma imagem em sÃmbolo do tipo MovieClip "Modify > Convert to Symbol…" (F8);
2 - Visualize na Biblioteca(Library, atalho F11 ou Ctrl + L) e insira o novo MovieClip no stage(palco);
3 - Em seguida coloque um nome de Instância para este MovieClip no inspetor de "Propriedades"(Properties "Ctl+F3");
4- No painel de Actions(F9) altere a 4º linha onde está inserido:
4 | addChild(carregarImg); |
Altere por:
4 5 | //sintaxe: seuMovieClipe.addChild(sua_Variavel_Loader); instancia_mc.addChild(carregarImg) |
Com isso você pode também manipular o movieClip via Actionscript entre várias propriedades e métodos. Um exemplo é a posição do eixo X e Y do seu MovieClip, na linha seguinte digite:
6 7 | instancia_mc.x = 100; //posição eixo X 100 pixels instancia_mc.y = 100; //posição eixo Y 100 pixels |

Imagem 3: painel Actions:
Obs:
Você pode utilizar outras propriedades do MovieClip, algumas como:
alpha, blendMode, filters, height, opaqueBackground, rotation, scaleX, scaleY, scale9Grid, scrollRect, transform, visible, width, x ou y.
Ex.: para objetos como MovieClip a propriedade "alpha" no AS3 devemos declarar valores de transparência entre "0 e 1" e não o valores entre "0 a 100"(indicando porcentagem (%) de transparência no AS2).
instancia_mc.alpha = 0.5 // seria 50% do valor de alpha no AS2.
Para Remover uma imagem externa, basta no lugar do "addChild()" digitar o método "removeChild()":
removeChild(carregarImg);
Para remover uma imagem externa que esteja dentro de algum MoviClip. O procedimento é o mesmo que foi utilizado para adicionar, bastando aplicar para o removeChild(). Digite:
4 5 | //sintaxe: seuMovieClipe.removeChild(sua_Variavel_Loader); instancia_mc.removeChild(carregarImg) |
Se você colocou removeChild() no código, ao testar o filme provavalemente você não verá nada no palco. Afinal depois de carregar a imagem some em seguida.
Vamos fazer uma interatividade com o mouse.
A situação é carregar a imagem no palco, e somente quando cilcar sobre a imagem carregada ela irá sumir.
Para isso precisamos fazer uma função que tenha este método removeChild() e só chamá-lo quando necessário. Nessa hora que usamos os Eventos de classes pra controlar o conteúdo. No nosso caso vamos usar evento de mouse MouseEvent.
Obs: lembra-se a imagem externa neste caso está adicionada dentro de um MovieClip. Então temos que remover a imagem que está dentro do MovieClp.
Altere a linha:
5 | instacia_mc.removeChild(carregarImg); |
Por:
5 6 7 8 | carregarImg.addEventListener(MouseEvent.CLICK, someImagem); function someImagem(meuEvento:MouseEvent){ instancia_mc.removeChild(carregarImg); } |
Explicando:
Na 5º linha adicionamos um ouvinte(addEventListener) à imagem(carregarImg) que verifica quando sofrer um evento de Clique do Mouse (MouseEvent.CLICK) irá chamar a função que denominamos de "someImagem". Em outras palavras, se clicar na imagem que foi carregada, irá chamar a função que faz sumir a imagem.
Na 6º linha temos a função que chamamos de "someImagem". Essa função é dedica para o evento de mouse, por isso dentro do parenteses da função precisa ter um argumento do mesmo tipo de Evento que queremos usar (meuEvento:MouseEvent). Esse argumento da função possúi algumas informações úteis sobre o objeto que sofre esse tipo de evento e podemos usar durante o código caso for necessário. Como nosso caso é simples, não será preciso por agora, mas de qualquer forma deverá declarar pra funcionar o evento. Essas funções chamam de Event Function Handler, que serve pra manipular eventos.
Dentro da função aplicamos o método de remover a imagem usando o removeChild(), imagem(carregarImg) a qual está inserida dentro de um MovieClip(instancia_mc)
instancia_mc.removeChild(carregarImg)
Obs: Se você está seguindo exatamente os passos e adicionou um MovieClip no palco com instância de "instancia_mc" seu código completo deve ter ficado algo assim.
1 2 3 4 5 6 7 8 9 10 11 12 | var carregarImg:Loader = new Loader(); var enderecoImg:URLRequest = new URLRequest("Coloque aqui o endereço da imagem"); carregarImg.load(enderecoImg); instancia_mc.addChild(carregarImg); instancia_mc.x = 100; instancia_mc.y = 100; carregarImg.addEventListener(MouseEvent.CLICK, someImagem); function someImagem(meuEvento:MouseEvent){ instancia_mc.removeChild(carregarImg); } |
Nada impede de você mudar os nomes de instâncias. Ok?!
Dica: Flash Help
Se você é curioso como eu, o "Ajuda do Flash" é uma “luz no escuro"(ou como preferir), ajuda e muito à retirar alguma dúvida e como utiilzar Actionscript.
Você pode consultar o “Help” do Flash(tecla F1 ajuda) ou acessando pelo menu “Help > Help Flash (F1)” .
Ao abrir o Ajuda do Flash, tem as referências já publicadas e exemplos de como utilizar e entender as Classes, seus métodos, propriedades e parâmetros do código Actionscript.
Basta digitar uma palavra chave, exemplo no nosso caso: “Loader class” (classe Loader) e escolher a versão da referância "Actioncript 3.0" e clicar em "Search"(Pesquisar).

Imagem 4: painel "Help"(ajuda do Flash):
Donwload 1 - exemplo com Classe Loader AS3.
Donwload 2 - exemplo com Classe Loader AS3.
Conheça também: Manipulando carregamento externo com AS3
Abraços e até a próxima!
Rodrigo Gonçalves
Equipe Alvo Web
O Conteúdo do Alvo Web Developers está licenciada sob uma Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
42 respostas ↓
1 farley // Jan 26, 2008 at 3:16 am
Muito, muito atenciosa a forma como foi explicada cada parte do código. Poucas vezes um artigo é tão bem explicado. Parabéns
2 Claudio // Mar 25, 2008 at 7:49 am
Vamos supor que o arquivo externo a ser carregado fosse um swf que deve sumir após o clique em um botão inserido dento dele. Como seria o código a se escreve nesse botão toda vez instancia_mc está no root?
3 Rodrigo // Mar 25, 2008 at 10:07 am
Claudio,
Exemplo:
neste exemplo abaixo, criei um arquivo Fla que irá receber um swf Externo.
Criei também um botão com instance name de “botao” no stage.
Este botão será responsável por “descarregar” o seu arquivo swf Externo.
Automaticamente o SWF Externo será carregado e somente após “clicar” no botão que irá descarregar este SWF Externo.
Obs.: o código é para Actionscript 3.0. Está brevemente comentado.
//criamos variaveis das classes URLRequest() e Loader()
var url:URLRequest = new URLRequest( coloque o endereco do seu SWF aqui );
var carregador:Loader = new Loader();
//carregamos o aqruivo externo pelo metodp load() da classe Laoder.
carregador.load( url );
//adicionamos o Loader no Stage
addChild( carregador );
//botao, quando clicar irá executar a função que faz sumir a imagem
botao.addEventListener( MouseEvent.CLICK, apagaImagem );
//função que apagua imagem apóes clicar no botão.
function apagaImagem( evento:MouseEvent ):void{
//carregador.unload(); //apenas descarrega imagem do stage pelo metodo unloade() da classe Laoder.
//se NÃO for carregar mais a mesma imagem, você pode utilizar o removeChild()
removeChild( carregador );; //removemos a variavel Loader que adicionamos anteriormente no Stage
}
Abraços.
4 wagner // Mar 30, 2008 at 7:38 pm
Rodrigo, muito bom o seu tutorial. Muito bem explicado, sem lacunas e voltas para se chegar ao objetivo. Parabéns!
Tenho um outro evento que só poderá ser executado após concluir o load da imagem, como devo fazer? Alguma dica? Eu sei que precisarei de usar um preloader mas ainda não achei nenhum que após carregar, execute o próximo evento.
Abs,
5 Rodrigo // Mar 30, 2008 at 8:49 pm
Wagner,
Você pode usar a propriedade chamada contentLoaderInfo da classe Loader(). Também existe uma outra classe que cuida disso LoaderInfo(). Vale apena dar uma conferida. Lá existe uma boa explicação no próprio Help do Flash.
Está propriedade contentLoaderInfo verifica o conteúdo que está sendo carregado( por exemplo uma imagem externa ) ele consegue “disparar informações”. E com isso, você consegue controlar as informações desse conteúdo e só assim depois fazer algo ou não com este arquivo externo.
Por exemplo, apenas chamar uma determinada função depois que estiver totalmente carregado o conteúdo ( Event.COMPLETE )
O legal disso que, você tem maior controle com o conteúdo externo.
No exemplo que montei logo abaixo está brevemente comentado o código. Crie um novo documento .Fla na versão AS3 e salve-o em uma pasta.
Coloque também nesta pasta uma imagem externa com tamanho relativamente grande em peso de KBytes. Isso para fazer testes de carregamento externo. E para simular conexão de downlaods, teste filme apertando (Ctrl + Enter 2 vezes seguidas).
As informações de carregamento irá mostrar na caixa de saÃda Output. Pense que ali no lugar do trace() você pode chamar alguma Evento ou ação/metodos que você quer fazer depois de completar o carregamento.
Selecione a 1º layer, e no 1º keyFrame digite no painel de Actions:
//criamos variaveisvar url:URLRequest = new URLRequest("imagemExterna.jpg");
var carregador:Loader = new Loader();
//carregadormos a imagem pelo metodo load() da classe Loader()
carregador.load( url );
//adicionamos a classe no stage pelo metodo addChild()
addChild(carregador);
//-----------------------------
//-----------------------------
//-----------------------------
//Aqui abaixo colocamos Eventos de manipulação do conteudo à ser carregado:
//Progresso - ProgressEvent.PROGRESS
//Completo - Event.COMPLETE
//-----------------------------
//-----------------------------
//-----------------------------
//PROGRESSO DE CARREGAMENTO
//Este evento ProgressEvent.PROGRESS verifica o progresso de carregamento do conteudo
carregador.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, progressoDeCarregamento );
function progressoDeCarregamento( evento:ProgressEvent ):void{
//pegamos o valor carregaod e valor total do conteudo(evento.target)
var carregado = evento.target.bytesLoaded;
var total = evento.target.bytesTotal;
var porcentagem = Math.round( carregado / total * 100 );
trace(porcentagem +" % carregados");
}
//-----------------------------
//-----------------------------
//IMAGEM CARREGDA POR COMPLETO
//Este evento Event.COMPLETE só é chamado quando o conteudo estiver totalmente carregado
carregador.contentLoaderInfo.addEventListener( Event.COMPLETE, mostraImagem );
function mostraImagem( evento:Event ):void{
trace("Conteudo carregado com sucesso! Event.COMPLETE\n");
}
Não sei se é exatamente isso que você estava procurando. Mas, acredito que o caminho esteja por este assunto que comentamos.
Valeu pela visita ao site e abraços.
6 Edmarvin // Jun 4, 2008 at 3:01 pm
Olá Rodrigo
seguinte, o que eu queria simplesmente era ter um swf que carregasse um swf externo com um preloader no swf externo.
o swf externo tem apenas um scrollpane mas não consigo chamar ele pra dentro do swf principal. É o meu site. clica-se no botão e ele chama o conteudo externo em um mc na cena principal.
Não consigo fazer isso no CS3. O pior é que abri o mei site todo pronto no CS3 e não consigo abrir mais no MX.
Pode me ajudar? qual código eu atribuo no botão e no mc?
7 Ric // Jun 24, 2008 at 4:55 pm
Ótima explicação. Concordo inteiramente com o Farley. Se for possÃvel, gostaria que tirasse uma dúvida: e se eu quisesse carregar várias imagens para o mesmo mc, chamando-as através de botões. Teria que criar variáveis diferentes para cada imagem? Valeu!
8 Rodrigo // Jun 25, 2008 at 12:51 pm
Ric,
Valeu pela presença no site.
No caso, você precisa criar diferentes variaveis da classe URLRequest(para endereços) e Loader(carregador da imagem).
Não consegui carregar todas no mesmo loader. Ele substitui uma a uma até deixar apenas a ultima carregada.
Consegui adicionar todos os loaders criados dentro de um MC, e fazer posição(eixo x) delas conforme vão carregando.
Neste exemplo abaixo.
Crie um MC vazio(pode ser com conteudo também, mas a imagem será carregada sobre), coloque no palco este MC e dê o nome de instância alvoMc.
Carregamos os objetos loaders dentro do MC( alvoMc.addChild(loader) ), e conforme vai carregando as imagens(quando estiver completo) faço a posição no eixo x de cada uma de acordo com a largura da imagem carregada para ficar mais “dinâmico” o posicionamento.
Faça um teste com imagens com seguinte nomes e colocadas na mesma pasta do seu arquivo Fla.
img1.jpg
img2.jpg
img3.jpg
img4.jpg
Segue o código como exemplo:
//criamos os endereços de cada imagem//-----------------------------------
//-----------------------------------
var url_1:URLRequest = new URLRequest("img1.jpg");
var url_2:URLRequest = new URLRequest("img2.jpg");
var url_3:URLRequest = new URLRequest("img3.jpg");
var url_4:URLRequest = new URLRequest("img4.jpg");
//criamos os loader para cada imagem
//-----------------------------------
//-----------------------------------
var loader_1:Loader = new Loader();
var loader_2:Loader = new Loader();
var loader_3:Loader = new Loader();
var loader_4:Loader = new Loader();
//cada loader é referente a uma imagem
//carregamos os endereços para o loader
//-----------------------------------
//-----------------------------------
loader_1.load( url_1 );
loader_2.load( url_2 );
loader_3.load( url_3 );
loader_4.load( url_4 );
/*addicionamos todos os loaders criados dentro de um unico MC que está no palco
o MC pode ser vazio ou não.
É necessário addChild para os loaders para ser visualizado a imagem no palco*/
//-----------------------------------
//-----------------------------------
alvoMc.addChild(loader_1);
alvoMc.addChild(loader_2);
alvoMc.addChild(loader_3);
alvoMc.addChild(loader_4);
//habilitamos a "maozinha" do cursor de mouse
alvoMc.buttonMode = true;
//adicionamos ouvintes de eventos quando a imagem estiver totalmente carregada chama sua função
//-----------------------------------
//-----------------------------------
loader_1.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader_2.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader_3.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader_4.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
//função que é chamada quando completa um carregamento de imagem
function loaderComplete(e:Event):void
{
//pode fazer o que quiser depois de carregar esta imagem
trace("carregamento completo", e.target.width, "px de largura");
//montamos a posição na horizontal(eixo X + largura da imagem);
//isso deixa a posição dinamica
//caso queira na posição vertical, altere para eixo Y e height(altura)
loader_2.x = loader_1.width;
loader_3.x = loader_2.x + loader_2.width;
loader_4.x = loader_3.x + loader_3.width;
}
Depois que quiser fazer algum evento com cada imagem, seria +ou- isso:
//Exemplos//adicionamos ouvintes de eventos de cique de mouse p/ cada imagem(objeto loader)
//-----------------------------------
//-----------------------------------
//imagem 1
loader_1.addEventListener(MouseEvent.CLICK, onClick_1);
function onClick_1(e:Event):void
{
//faz algo com a imagem, neste exemplo usei apenas o trace()
trace(e.target, "você clicou no 1º");
}
//imagem 2
loader_2.addEventListener(MouseEvent.CLICK, onClick_2);
function onClick_2(e:Event):void
{
trace(e.target, "você clicou no 2º");
}
//imagem 3
loader_3.addEventListener(MouseEvent.CLICK, onClick_3);
function onClick_3(e:Event):void
{
trace(e.target, "você clicou no 3º");
}
//imagem 4
loader_4.addEventListener(MouseEvent.CLICK, onClick_4);
function onClick_4(e:Event):void
{
trace(e.target, "você clicou no 4º");
}
Espero ter ajudado em algo.
Se conhecer outras maneiras ou técnicas de fazer isso, nos avise. Estes foram só um exemplo que talvez dê pra explorar mais possibilidades.
Abraços.
9 VÃtor Andrade // Jul 3, 2008 at 10:26 am
O rodrigo, blz cara? muito massa esse tutorial, achei hoje, to começando a fuçar no AC3 aqui na agencia que eu trabalho mas tem uma coisinha, fiz tudo exatamente como ta no teu tutorial, e funcionou tudo blz no flash, mas quando abro a page no browser ele da um erro
Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.
Tu tem como me dizer o que ta pegando na bagaça? valeu cara,e parabens, massa mesmo teu tutorial, como citado antes, “sem lacunas”.
até mais e tudo de bom.
By
VÃtor Andrade
10 Rodrigo // Jul 3, 2008 at 5:45 pm
Valeu Vitor pela visita ao site.
Fiz teste aqui localmente e funcionou normalmente. Também quando transfiro para o ftp todos os arquivos gerados pelo flash: swf, html(com AC_RunActiveContent.js) e imagem, não surge este erro ioError.
* IOErrorEvent.IO_ERROR (ioError)
Aparece quando tem um “erro fatal” que resulta em um “cancelamento” na hora de carregar o arquivo. Talvez seja problemas com a conexão no momento.
O flash dispara informações sobre o conteúdo carregado e os Eventos que ajuda “reconhecer” o que aconteceu com o conteúdo externo, com isso podemos pelo menos fazer alguma coisa quando ocorrer, por exemplo disparar uma função que avisa sobre o erro de carregamento, progresso, quando tiver completo, entre outros.
Uma boa dica que ajuda conhecer mais sobre erros mais especÃficos como este informado. Quando surgir o erro na caixa de saÃda(output), copie a mensagem de erro que aparece(da mesma forma que você fez no comentário). Ex:
Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.
E procure sobre este erro por exemplo no Google. Existem alguns fóruns que discutem sobre erros informado que talvez já tenham outras soluções apresentadas. A maioria está em inglês.
Exemplo pesquisado: http://www.flashdevelop.org/community/viewtopic.php?p=4624
Este tutorial sobre Loader acima apenas mostra carregamento direto da imagem, algo mais simples mesmo.
Não demos foco por exemplo neste tópico, se caso “ocorrer eventualmente algum erro”, ou progresso de carregamento, etc. Pois, é um assunto um pouco “amplo” que fizemos em outro tópico.
Se quiser conhecer um pouco mais sobre as possibilidades de usar alguns Eventos de manipulação de carregamento.
Acesse: Manipulando carregamento externo com AS3
Abraços.
11 Helo // Jul 25, 2008 at 2:50 pm
Oi Rodrigo,
como faço para o AS3 reconhecer a transparencia de uma imagem .png com canal alfa. É que estou programando um menu só com imagens, mas tenho que fazer ele reconhecer somente a cor branca e ignorar a preta que será transparente. Vc sabe como fazer isso?
helo
12 Caetano // Out 27, 2008 at 12:47 pm
Ainda não entendi como relacionar filmes com a Clase Loader, como fazÃamos antes com o _level. Como mandar uma variável ou uma ação de um swf aberto para outro?
13 Rodrigo // Out 27, 2008 at 3:23 pm
Cateano, tudo bem?
O Loader do AS3 funciona como um “alvo” pra receber um arquivo visual. Ou seja, ele é usado pra carregar externamente arquivos como: swf, png, jpg, gif.
Imagine o objeto Loader como um MovieClip que recebe uma imagem.
O objeto Loader também recebe “ouvintes de eventos”, com isso, você consegue manipular o objeto Loader depois de sofrer um determinado eventos.
Por exemplo, depois de carregado por completo, você chama uma função, etc.
Dê uma olhada nesse tópico pra ter uma idéia sobre:
http://www.alvoweb.com/manipulando-carregamento-externo-com-as3/
Dê uma olha nesse site pra conhecer a migração de AS2 para AS3:
http://livedocs.adobe.com/flex/2/langref/migration.html
Segundo a Adobe:
O _level é um propriedade global(que pode ter acesso a esta propriedade em qualquer nÃvel do filme Flash). Mas, o _level foi removido do AS3.
O conceito de nÃveis não existe no AS3.
Dê uma olhada no help do Flash e procure sobre o pacote de classe flash.display e sobre classe Loader para ter maiores detalhes sobre isso.
Abraços.
14 Caetano // Out 27, 2008 at 3:52 pm
Rodrigo, eu entendo o DisplayLista, mas como um upgrade do Depth, estou certo? Quando vc fala que “O Loader do AS3 funciona como um alvo pra receber um arquivo visual”, que dizer que com o Level sumiu também a figura do carregamento de um SWF e este interagindo com o que o chamou?
Um SWF importado não pode mais interagir?
POr exemplo, se eu tenho :
var clipe:MovieClip = new MovieClip();
addChild(clipe);
var importar:Loader = new Loader();
importar.load(new URLRequest(”alvo.swf”));
clipe.name = “conteiner”;
clipe.addChild(importar);
clipe.buttonMode = true;
clipe.addEventListener(MouseEvent.CLICK, buscarVar);
function buscarVar(event:MouseEvent):void{
trace(”como acesso uma variável declarada em alvo.swf?”);
//(this[’conteiner’].varTexto)
//(this.clipe.varTexto)
}
15 Rodrigo // Out 28, 2008 at 10:08 am
Caetano,
Pesquisei por aà e encontrei uma maneira de ter acesso a variável declarada em outro swf.
Você pode conferir também nesses tópicos talvez ajude esclarecer melhor:
http://www.websitemediaplayers.com/blog/global-variables-as3/
http://www.greenethumb.com/article/11/global-variables-in-as3
Como se fosse variáveis “globais”, que pode ter acesso em qualquer nÃvel.
Teremos que criar uma classe para declarar variáveis estáticas. Deste modo conseguirá acessar as variáveis e valores declarados em outro swf.
Faça um teste.
Crie uma pasta, iremos criar 3 arquivos.
MinhaVariavel.as: uma classe declarando variáveis estáticas.
loader.swf - arquivo principal que carrega o arquivo externo(alvo.swf)
alvo.swf: será o arquivo carregado contendo as variaveis e seus valores.
Criando a classe MinhaVariavel.as:
abra um bloco de notas e salve o arquivo como MinhaVariavel.as:
Insira o código:
No arquivo alvo.fla, no 1º frame insira o código:
Agora no arquivo loader.fla, abra a janela de actions no 1º frame e insira:
Só testar. Verá que consegue acessar as variáveis estáticas declaradas os valores em outro swf.
Espero ter ajudado.
Se souber outras maneiras nos avise.
Abraços.
16 Caetano // Out 29, 2008 at 11:58 am
Obrigado Rodrigo. Vou testar.
Só queria entender pq complicar algo que era tão simples e funcional.
Eu usava e abusava do conceito do level para troca de variáveis e funções. Vou ter que reestruturar tudo.
17 Rodrigo // Out 29, 2008 at 12:14 pm
Pois é Caetano, o AS3 é bem diferente de AS2.
Eu considero outra linguagem!
Tem coisa que realmente acho mais fácil no AS2 do que AS3. Mas, acho também, que é um hábito.
Pelo pouco que conheço de AS, acho que existe muitas maneiras de chegar em um resultado, principalmente se utilizar o AS2, e as vezes essa “liberdade” em excesso pode ser prejudicial. Pois, um faz de um jeito, outro faz de outra maneira,…e isso conseqüentemente pode gerar mais dúvidas.
Mas, pensa pelo lado positivo, o AS3 apresentá maneiras mais “sólidas” e “linear” pra criação.
Ex: endereço externo no AS3 você sabe que sempre precisará usar URLRequest,… etc
Pra carregar imagens, sempre precisará do Loader,…e assim por diante.
Acho que a melhor coisa, é tentar “desligar” um pouco dos conceitos(e vÃcios) de AS2 pra ajudar compreender melhor o AS3.
Se conhecer outras técnicas pra fazer isso que queria, nos avise.
Abraços.
18 Douglas querubin // Dez 30, 2008 at 10:01 pm
Olá, gostaria que vc me enviasse o arquivo .fla para me analisar uma galeria de imagens.
19 Rodrigo // Dez 31, 2008 at 3:33 pm
Douglas, no final do post existe alguns exemplo que você pode analisar referente a este tutorial.
Se procurar na net consegue encontrar bastante exemplos de galerias prontas. A maioria em inglês.
Abraços.
20 Marcio // Fev 28, 2009 at 1:11 am
Olá Rodrigo, primeiramente parabéns pelo trabalho!
A minha dúvida é o seguinte, estou carregando um swf externo dentro de em um mc que fica fora do palco, clicando em um botão que além de carregar o swf, chama o mc pro palco. Gostaria de saber se você conhece uma maneira desse swf não precisar ser recarregado toda vez que eu clicar para chamar o mc para o palco. O que eu quero é carregar esse swf e continuar usando o botão para poder navegar. Para entender melhor, estou usando um sisteminha de navegação, onde ao clicar em um determinado botão chamamos uma página e recolhemos a que está no palco.
Abração e muito obrigado!
21 Rodrigo // Fev 28, 2009 at 3:23 am
Olá Marcio, valeu pela visita ao site.
Geralmente, quando carregado o arquivo externo no flash, esse arquivo depois de carregado já está no cache do navegador, e a próxima que carregar o mesmo arquivo, carrega mais rápido por já estar na memória.
Se entendi direito a sua intenção. Você quer carregar um novo arquivo sempre que clicar no botão. E o arquivo anterior apagado. É isso?
talvez você pode fazer é criar um Array pra cadastrar os endereços dos seus arquivos, e fazer carregar o próximo arquivo dessa lista que está no Array toda vez que clicar no botão.
Fiz um exemplo não sei se ajuda:
Versão AS3,
Crie um botão no stage com nome de instância: btn
no 1° frame da timeline principal insira o código:
O que esse código faz é carregar imagens em um objeto Loader(pode adicionar esse loader dentro de um Objeto MC/Sprite), cadastrei na lista(Array) endereços das imagens, e apenas com um botão quando clicado chama o 1° arquivo e ao clicar novamente no botão, chama a próxima imagem da lista, e quando chegar no ultimo arquivo, recomeça carregar a 1° imagem fazendo um “loop”.
Sempre quando carregado a imagem o Loader substitui a imagem atual pela próxima imagem solicitada. Não é possÃvel ter mais de 1 imagem em 1 mesmo objeto Loader. Mas pode criar um MC em que pode ter vários Objetos Loader caso precise carregar mais de um arquivo no mesmo MC/Sprite.
Abraços.
22 André Rodrigues // Mar 10, 2009 at 11:31 am
Olá Rodrigo, tudo bom? Primeiramente quero parabenizar pelo site, aprendo muita coisa aki…
Dessa vez tenho um problema:
Meu flash é um swf de um frame, que na verdade é todo controlado por um .as externo…
Ele tem algumas variáveis e talz para mudanças automaticas de cor e etc…
O que acontece é que no centro dele, eu quero por um slide com fotos carregadas de uma pasta externa, mas tentei primeiramente só fazer um quadrado que carregasse uma imagem estática mesmo… tentei com seu tutorial mas obtive as respostas de erro:
SOURCE: var carregarImg:Loader = new Loader();
ERROR: 1046: Type was not found or was not a compile-time constant: Loader.
SOURCE: var carregarImg:Loader = new Loader();
ERROR: 1180: Call to a possibly undefined method Loader.
Como você disse que tudo tem que ir no frame inicial eu coloquei todo o código dentro da minha função que é executada no primeiro frame… o formato como já disse é um SWF com um só frame (com vários objetos e MC’s - dividos em vários layers) e um arquivo .as externo (main_timeline.as)
Esse é o código do main_timeline.as
[code]package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.ColorTransform;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class main_timeline extends Sprite
{
private var cor0:Number;
private var cor1:Number;
private var cor2:Number;
private var cor3:Number;
private var cor4:Number;
private var cor5:Number;
private var v_bt01:Boolean;
private var v_bt02:Boolean;
private var v_bt03:Boolean;
private var v_bt04:Boolean;
public function main_timeline()
{
//Outras variáveis
v_bt01 = false;
v_bt02 = false;
v_bt03 = false;
v_bt04 = false;
//Declara as variáveis de cor como string:
var s_cor0:String;
var s_cor1:String;
var s_cor2:String;
var s_cor3:String;
var s_cor4:String;
var s_cor5:String;
//Tenta pegar as variáveis do HTML:
try
{
s_cor0 = root.loaderInfo.parameters[’color0′].substring(1, 7);
s_cor1 = root.loaderInfo.parameters[’color1′].substring(1, 7);
s_cor2 = root.loaderInfo.parameters[’color2′].substring(1, 7);
s_cor3 = root.loaderInfo.parameters[’color3′].substring(1, 7);
s_cor4 = root.loaderInfo.parameters[’color4′].substring(1, 7);
s_cor5 = root.loaderInfo.parameters[’color5′].substring(1, 7);
}
catch (e:TypeError) //Se não conseguir pegar, cores padrão
{
s_cor0 = “0000ff”;
s_cor1 = “000000″;
s_cor2 = “FF00FF”;
s_cor3 = “00FFFF”;
s_cor4 = “ff0000″;
s_cor5 = “ffffff”;
}
//Trocando as variáveis do HTML para RGB:
cor0 = (Number)(”0x”+s_cor0);
cor1 = (Number)(”0x”+s_cor1);
cor2 = (Number)(”0x”+s_cor2);
cor3 = (Number)(”0x”+s_cor3);
cor4 = (Number)(”0x”+s_cor4);
cor5 = (Number)(”0x”+s_cor5);
//Modificando cores no swf
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//Controlando o botão 01:
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OVER, bt01_manageMouseOver);
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OUT, bt01_manageMouseOut);
bt01.bt01_bt.addEventListener(MouseEvent.CLICK, bt01_manageMouseClick);
bt01.addEventListener(Event.ENTER_FRAME, bt01_manageEnterFrame);
//Controlando o botão 02:
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OVER, bt02_manageMouseOver);
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OUT, bt02_manageMouseOut);
bt02.bt02_bt.addEventListener(MouseEvent.CLICK, bt02_manageMouseClick);
bt02.addEventListener(Event.ENTER_FRAME, bt02_manageEnterFrame);
//Controlando o botão 03:
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OVER, bt03_manageMouseOver);
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OUT, bt03_manageMouseOut);
bt03.bt03_bt.addEventListener(MouseEvent.CLICK, bt03_manageMouseClick);
bt03.addEventListener(Event.ENTER_FRAME, bt03_manageEnterFrame);
//Controlando o botão 04:
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OVER, bt04_manageMouseOver);
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OUT, bt04_manageMouseOut);
bt04.bt04_bt.addEventListener(MouseEvent.CLICK, bt04_manageMouseClick);
bt04.addEventListener(Event.ENTER_FRAME, bt04_manageEnterFrame);
bullets.addEventListener(Event.ENTER_FRAME, bulletsstop_manageEnterFrame);
logo.addEventListener(Event.ENTER_FRAME, logostop_manageEnterFrame);
//Slide de fotos:
var carregarImg:Loader = new Loader();
var enderecoImg:URLRequest = new URLRequest(”imgs/foto01.jpg”);
carregarImg.load(enderecoImg);
addChild(carregarImg);
}
//OUTRAS FUNÇÕES:
//Função Stop Bullets:
private function bulletsstop_manageEnterFrame(e:Event)
{
if (bullets.currentFrame == 20) bullets.stop();
}
private function logostop_manageEnterFrame(e:Event)
{
if (logo.currentFrame == 15) logo.stop();
}
//Função para Rollover do botão 01:
private function bt01_manageMouseOver(e:MouseEvent)
{
bt01.gotoAndPlay (1);
v_bt01 = true;
}
private function bt01_manageMouseOut(e:MouseEvent)
{
bt01.gotoAndPlay (6);
}
private function bt01_manageMouseClick(e:MouseEvent)
{
var url:String = “http://www.google.com”;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, ‘_blank’);
}
catch (e:Error) {
trace(”Error occurred!”);
}
}
private function bt01_manageEnterFrame(e:Event)
{
if (v_bt01 == false) bt01.gotoAndStop (11);
if (bt01.currentFrame == 5) bt01.stop();
if (bt01.currentFrame == 11) bt01.stop();
}
//Função para Rollover do botão 02:
private function bt02_manageMouseOver(e:MouseEvent)
{
bt02.gotoAndPlay (1);
v_bt02 = true;
}
private function bt02_manageMouseOut(e:MouseEvent)
{
bt02.gotoAndPlay (6);
}
private function bt02_manageMouseClick(e:MouseEvent)
{
var url:String = “http://www.myspace.com”;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, ‘_blank’);
}
catch (e:Error) {
trace(”Error occurred!”);
}
}
private function bt02_manageEnterFrame(e:Event)
{
if (v_bt02 == false) bt02.gotoAndStop (11);
if (bt02.currentFrame == 5) bt02.stop();
if (bt02.currentFrame == 11) bt02.stop();
}
//Função para Rollover do botão 03:
private function bt03_manageMouseOver(e:MouseEvent)
{
bt03.gotoAndPlay (1);
v_bt03 = true;
}
private function bt03_manageMouseOut(e:MouseEvent)
{
bt03.gotoAndPlay (6);
}
private function bt03_manageMouseClick(e:MouseEvent)
{
var url:String = “http://www.flickr.com”;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, ‘_blank’);
}
catch (e:Error) {
trace(”Error occurred!”);
}
}
private function bt03_manageEnterFrame(e:Event)
{
if (v_bt03 == false) bt03.gotoAndStop (11);
if (bt03.currentFrame == 5) bt03.stop();
if (bt03.currentFrame == 11) bt03.stop();
}
//Função para Rollover do botão 04:
private function bt04_manageMouseOver(e:MouseEvent)
{
bt04.gotoAndPlay (1);
v_bt04 = true;
}
private function bt04_manageMouseOut(e:MouseEvent)
{
bt04.gotoAndPlay (6);
}
private function bt04_manageMouseClick(e:MouseEvent)
{
var url:String = “http://www.fotolog.com”;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, ‘_blank’);
}
catch (e:Error) {
trace(”Error occurred!”);
}
}
private function bt04_manageEnterFrame(e:Event)
{
if (v_bt04 == false) bt04.gotoAndStop (11);
if (bt04.currentFrame == 5) bt04.stop();
if (bt04.currentFrame == 11) bt04.stop();
}
//Fução para trocar as cores:
private function onEnterFrame(event:Event)
{
var trans:ColorTransform = new ColorTransform;
//Troca de cor fundo:
trans.color = cor0;
fundo.transform.colorTransform = trans;
//Troca de cor fundo menu:
trans.color = cor1;
borda_slide.transform.colorTransform = trans;
//Troca de cor das bullets:
trans.color = cor5;
bullets.transform.colorTransform = trans;
//Troca de cores dos botões:
trans.color = cor3;
bt01.bt01_txt01.txt01.transform.colorTransform = trans;
trans.color = cor4;
bt01.bt01_txt02.txt02.transform.colorTransform = trans;
trans.color = cor3;
bt02.bt02_txt03.txt03.transform.colorTransform = trans;
trans.color = cor4;
bt02.bt02_txt04.txt04.transform.colorTransform = trans;
trans.color = cor3;
bt03.bt03_txt05.txt05.transform.colorTransform = trans;
trans.color = cor4;
bt03.bt03_txt06.txt06.transform.colorTransform = trans;
trans.color = cor3;
bt04.bt04_txt07.txt07.transform.colorTransform = trans;
trans.color = cor4;
bt04.bt04_txt08.txt08.transform.colorTransform = trans;
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}[/code]
23 André Rodrigues // Mar 10, 2009 at 12:27 pm
Opa Rodrigo, já corrigi onde era meu erro
Agora está funcionando ok, exceto pelo fato de que eu preciso colocar o endereço completo da imagem… e que ele fica em branco até carregar a imagem.
Não tem como por um preloader pra carregando a imagem? E como eu faço se eu quiser que de tempo em tempo ele troque de uma imagem pra outra? (de preferência com uma transição).
o código final ficou assim (funcionando perfeito):
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.ColorTransform;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.display.Bitmap
import flash.display.Loader
public class main_timeline extends Sprite
{
private var cor0:Number;
private var cor1:Number;
private var cor2:Number;
private var cor3:Number;
private var cor4:Number;
private var cor5:Number;
private var v_bt01:Boolean;
private var v_bt02:Boolean;
private var v_bt03:Boolean;
private var v_bt04:Boolean;
public function main_timeline()
{
//Outras variáveis
v_bt01 = false;
v_bt02 = false;
v_bt03 = false;
v_bt04 = false;
//Declara as variáveis de cor como string:
var s_cor0:String;
var s_cor1:String;
var s_cor2:String;
var s_cor3:String;
var s_cor4:String;
var s_cor5:String;
//Tenta pegar as variáveis do HTML:
try
{
s_cor0 = root.loaderInfo.parameters['color0'].substring(1, 7);
s_cor1 = root.loaderInfo.parameters['color1'].substring(1, 7);
s_cor2 = root.loaderInfo.parameters['color2'].substring(1, 7);
s_cor3 = root.loaderInfo.parameters['color3'].substring(1, 7);
s_cor4 = root.loaderInfo.parameters['color4'].substring(1, 7);
s_cor5 = root.loaderInfo.parameters['color5'].substring(1, 7);
}
catch (e:TypeError) //Se não conseguir pegar, cores padrão
{
s_cor0 = "0000ff";
s_cor1 = "000000";
s_cor2 = "FF00FF";
s_cor3 = "00FFFF";
s_cor4 = "ff0000";
s_cor5 = "ffffff";
}
//Trocando as variáveis do HTML para RGB:
cor0 = (Number)("0x"+s_cor0);
cor1 = (Number)("0x"+s_cor1);
cor2 = (Number)("0x"+s_cor2);
cor3 = (Number)("0x"+s_cor3);
cor4 = (Number)("0x"+s_cor4);
cor5 = (Number)("0x"+s_cor5);
//Modificando cores no swf
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//Controlando o botão 01:
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OVER, bt01_manageMouseOver);
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OUT, bt01_manageMouseOut);
bt01.bt01_bt.addEventListener(MouseEvent.CLICK, bt01_manageMouseClick);
bt01.addEventListener(Event.ENTER_FRAME, bt01_manageEnterFrame);
//Controlando o botão 02:
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OVER, bt02_manageMouseOver);
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OUT, bt02_manageMouseOut);
bt02.bt02_bt.addEventListener(MouseEvent.CLICK, bt02_manageMouseClick);
bt02.addEventListener(Event.ENTER_FRAME, bt02_manageEnterFrame);
//Controlando o botão 03:
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OVER, bt03_manageMouseOver);
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OUT, bt03_manageMouseOut);
bt03.bt03_bt.addEventListener(MouseEvent.CLICK, bt03_manageMouseClick);
bt03.addEventListener(Event.ENTER_FRAME, bt03_manageEnterFrame);
//Controlando o botão 04:
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OVER, bt04_manageMouseOver);
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OUT, bt04_manageMouseOut);
bt04.bt04_bt.addEventListener(MouseEvent.CLICK, bt04_manageMouseClick);
bt04.addEventListener(Event.ENTER_FRAME, bt04_manageEnterFrame);
bullets.addEventListener(Event.ENTER_FRAME, bulletsstop_manageEnterFrame);
logo.addEventListener(Event.ENTER_FRAME, logostop_manageEnterFrame);
var carregarImg:Loader = new Loader();
var enderecoImg:URLRequest = new URLRequest("http://i320.photobucket.com/albums/nn357/foxdanger/foto01.png");
carregarImg.load(enderecoImg);
addChild(carregarImg);
}
//OUTRAS FUNÇÕES:
//Função Stop Bullets:
private function bulletsstop_manageEnterFrame(e:Event)
{
if (bullets.currentFrame == 20) bullets.stop();
}
private function logostop_manageEnterFrame(e:Event)
{
if (logo.currentFrame == 15) logo.stop();
}
//Função para Rollover do botão 01:
private function bt01_manageMouseOver(e:MouseEvent)
{
bt01.gotoAndPlay (1);
v_bt01 = true;
}
private function bt01_manageMouseOut(e:MouseEvent)
{
bt01.gotoAndPlay (6);
}
private function bt01_manageMouseClick(e:MouseEvent)
{
var url:String = "http://www.google.com";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_blank');
}
catch (e:Error) {
trace("Error occurred!");
}
}
private function bt01_manageEnterFrame(e:Event)
{
if (v_bt01 == false) bt01.gotoAndStop (11);
if (bt01.currentFrame == 5) bt01.stop();
if (bt01.currentFrame == 11) bt01.stop();
}
//Função para Rollover do botão 02:
private function bt02_manageMouseOver(e:MouseEvent)
{
bt02.gotoAndPlay (1);
v_bt02 = true;
}
private function bt02_manageMouseOut(e:MouseEvent)
{
bt02.gotoAndPlay (6);
}
private function bt02_manageMouseClick(e:MouseEvent)
{
var url:String = "http://www.myspace.com";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_blank');
}
catch (e:Error) {
trace("Error occurred!");
}
}
private function bt02_manageEnterFrame(e:Event)
{
if (v_bt02 == false) bt02.gotoAndStop (11);
if (bt02.currentFrame == 5) bt02.stop();
if (bt02.currentFrame == 11) bt02.stop();
}
//Função para Rollover do botão 03:
private function bt03_manageMouseOver(e:MouseEvent)
{
bt03.gotoAndPlay (1);
v_bt03 = true;
}
private function bt03_manageMouseOut(e:MouseEvent)
{
bt03.gotoAndPlay (6);
}
private function bt03_manageMouseClick(e:MouseEvent)
{
var url:String = "http://www.flickr.com";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_blank');
}
catch (e:Error) {
trace("Error occurred!");
}
}
private function bt03_manageEnterFrame(e:Event)
{
if (v_bt03 == false) bt03.gotoAndStop (11);
if (bt03.currentFrame == 5) bt03.stop();
if (bt03.currentFrame == 11) bt03.stop();
}
//Função para Rollover do botão 04:
private function bt04_manageMouseOver(e:MouseEvent)
{
bt04.gotoAndPlay (1);
v_bt04 = true;
}
private function bt04_manageMouseOut(e:MouseEvent)
{
bt04.gotoAndPlay (6);
}
private function bt04_manageMouseClick(e:MouseEvent)
{
var url:String = "http://www.fotolog.com";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_blank');
}
catch (e:Error) {
trace("Error occurred!");
}
}
private function bt04_manageEnterFrame(e:Event)
{
if (v_bt04 == false) bt04.gotoAndStop (11);
if (bt04.currentFrame == 5) bt04.stop();
if (bt04.currentFrame == 11) bt04.stop();
}
//Fução para trocar as cores:
private function onEnterFrame(event:Event)
{
var trans:ColorTransform = new ColorTransform;
//Troca de cor fundo:
trans.color = cor0;
fundo.transform.colorTransform = trans;
//Troca de cor fundo menu:
trans.color = cor1;
borda_slide.transform.colorTransform = trans;
//Troca de cor das bullets:
trans.color = cor5;
bullets.transform.colorTransform = trans;
//Troca de cores dos botões:
trans.color = cor3;
bt01.bt01_txt01.txt01.transform.colorTransform = trans;
trans.color = cor4;
bt01.bt01_txt02.txt02.transform.colorTransform = trans;
trans.color = cor3;
bt02.bt02_txt03.txt03.transform.colorTransform = trans;
trans.color = cor4;
bt02.bt02_txt04.txt04.transform.colorTransform = trans;
trans.color = cor3;
bt03.bt03_txt05.txt05.transform.colorTransform = trans;
trans.color = cor4;
bt03.bt03_txt06.txt06.transform.colorTransform = trans;
trans.color = cor3;
bt04.bt04_txt07.txt07.transform.colorTransform = trans;
trans.color = cor4;
bt04.bt04_txt08.txt08.transform.colorTransform = trans;
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
24 André Rodrigues // Mar 10, 2009 at 4:51 pm
Faaaaaalaaaaa Rodrigo…
Olha eu ai pertubando de novo!
Consegui resover o problema de fazer um slide, ta funcionando legal, agora soh ficou a questão do preload… pq quando eu ponho no ar, a imagem fica em branco atéééé carregar a imagem, queria que aparecesse uma paradinha animada escrito loading enquanto carrega as imagens do slide….
como vc faria??
ai vai o codigo completo ateh agora:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.ColorTransform;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.display.Loader;
public class main_timeline extends Sprite
{
private var cor0:Number;
private var cor1:Number;
private var cor2:Number;
private var v_slide:Number;
private var v_bt01:Boolean;
private var v_bt02:Boolean;
private var v_bt03:Boolean;
private var v_bt04:Boolean;
public function main_timeline()
{
//Outras variáveis
v_bt01 = false;
v_bt02 = false;
v_bt03 = false;
v_bt04 = false;
v_slide = 1;
//Declara as variáveis de cor como string:
var s_cor0:String;
var s_cor1:String;
var s_cor2:String;
//Tenta pegar as variáveis do HTML:
try
{
s_cor0 = root.loaderInfo.parameters['color0'].substring(1, 7);
s_cor1 = root.loaderInfo.parameters['color1'].substring(1, 7);
s_cor2 = root.loaderInfo.parameters['color2'].substring(1, 7);
}
catch (e:TypeError) //Se não conseguir pegar, cores padrão
{
s_cor0 = "1e1e1e";
s_cor1 = "d71b11";
s_cor2 = "ffffff";
}
//Trocando as variáveis do HTML para RGB:
cor0 = (Number)("0x"+s_cor0);
cor1 = (Number)("0x"+s_cor1);
cor2 = (Number)("0x"+s_cor2);
//Modificando cores no swf
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//Controlando o botão 01:
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OVER, bt01_manageMouseOver);
bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OUT, bt01_manageMouseOut);
bt01.bt01_bt.addEventListener(MouseEvent.CLICK, bt01_manageMouseClick);
bt01.addEventListener(Event.ENTER_FRAME, bt01_manageEnterFrame);
//Controlando o botão 02:
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OVER, bt02_manageMouseOver);
bt02.bt02_bt.addEventListener(MouseEvent.MOUSE_OUT, bt02_manageMouseOut);
bt02.bt02_bt.addEventListener(MouseEvent.CLICK, bt02_manageMouseClick);
bt02.addEventListener(Event.ENTER_FRAME, bt02_manageEnterFrame);
//Controlando o botão 03:
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OVER, bt03_manageMouseOver);
bt03.bt03_bt.addEventListener(MouseEvent.MOUSE_OUT, bt03_manageMouseOut);
bt03.bt03_bt.addEventListener(MouseEvent.CLICK, bt03_manageMouseClick);
bt03.addEventListener(Event.ENTER_FRAME, bt03_manageEnterFrame);
//Controlando o botão 04:
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OVER, bt04_manageMouseOver);
bt04.bt04_bt.addEventListener(MouseEvent.MOUSE_OUT, bt04_manageMouseOut);
bt04.bt04_bt.addEventListener(MouseEvent.CLICK, bt04_manageMouseClick);
bt04.addEventListener(Event.ENTER_FRAME, bt04_manageEnterFrame);
bullets.addEventListener(Event.ENTER_FRAME, bulletsstop_manageEnterFrame);
var carregarImg:Loader = new Loader();
var enderecoImg:URLRequest = new URLRequest("/files/2/foto01.png");
carregarImg.load(enderecoImg);
slide.foto01.addChild(carregarImg);
var carregarImg2:Loader = new Loader();
var enderecoImg2:URLRequest = new URLRequest("/files/2/foto02.png");
carregarImg2.load(enderecoImg2);
slide2.foto02.addChild(carregarImg2);
if (v_slide == 1) {
slide.gotoAndPlay(1);
slide2.gotoAndStop(1);
}
slide.addEventListener(Event.ENTER_FRAME, slidechange_manageEnterFrame);
}
//OUTRAS FUNÇÕES:
private function slidechange_manageEnterFrame (e:Event)
{
if (slide2.currentFrame == 160) {
slide2.gotoAndStop(1);
}
if (slide.currentFrame == 140) {
slide2.gotoAndPlay(1);
v_slide = 2;
addEventListener(Event.ENTER_FRAME, slidechange2_manageEnterFrame);
}
}
private function slidechange2_manageEnterFrame (e:Event)
{
if (slide.currentFrame == 160) {
slide.gotoAndStop(1);
}
if (slide2.currentFrame == 140) {
slide.gotoAndPlay(1);
v_slide = 1;
addEventListener(Event.ENTER_FRAME, slidechange_manageEnterFrame);
}
}
//Função Stop Bullets:
private function bulletsstop_manageEnterFrame(e:Event)
{
if (bullets.currentFrame == 20) bullets.stop();
}
//Função para Rollover do botão 01:
private function bt01_manageMouseOver(e:MouseEvent)
{
bt01.gotoAndPlay (1);
v_bt01 = true;
}
private function bt01_manageMouseOut(e:MouseEvent)
{
bt01.gotoAndPlay (6);
}
private function bt01_manageMouseClick(e:MouseEvent)
{
var url:String = "quem_somos.php";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_self');
}
catch (e:Error) {
trace("Ocorreu um erro!");
}
}
private function bt01_manageEnterFrame(e:Event)
{
if (v_bt01 == false) bt01.gotoAndStop (11);
if (bt01.currentFrame == 5) bt01.stop();
if (bt01.currentFrame == 11) bt01.stop();
}
//Função para Rollover do botão 02:
private function bt02_manageMouseOver(e:MouseEvent)
{
bt02.gotoAndPlay (1);
v_bt02 = true;
}
private function bt02_manageMouseOut(e:MouseEvent)
{
bt02.gotoAndPlay (6);
}
private function bt02_manageMouseClick(e:MouseEvent)
{
var url:String = "servicos.php";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_self');
}
catch (e:Error) {
trace("Ocorreu um erro!");
}
}
private function bt02_manageEnterFrame(e:Event)
{
if (v_bt02 == false) bt02.gotoAndStop (11);
if (bt02.currentFrame == 5) bt02.stop();
if (bt02.currentFrame == 11) bt02.stop();
}
//Função para Rollover do botão 03:
private function bt03_manageMouseOver(e:MouseEvent)
{
bt03.gotoAndPlay (1);
v_bt03 = true;
}
private function bt03_manageMouseOut(e:MouseEvent)
{
bt03.gotoAndPlay (6);
}
private function bt03_manageMouseClick(e:MouseEvent)
{
var url:String = "parceiros.php";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_self');
}
catch (e:Error) {
trace("Ocorreu um erro!");
}
}
private function bt03_manageEnterFrame(e:Event)
{
if (v_bt03 == false) bt03.gotoAndStop (11);
if (bt03.currentFrame == 5) bt03.stop();
if (bt03.currentFrame == 11) bt03.stop();
}
//Função para Rollover do botão 04:
private function bt04_manageMouseOver(e:MouseEvent)
{
bt04.gotoAndPlay (1);
v_bt04 = true;
}
private function bt04_manageMouseOut(e:MouseEvent)
{
bt04.gotoAndPlay (6);
}
private function bt04_manageMouseClick(e:MouseEvent)
{
var url:String = "fale_conosco.php";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, '_self');
}
catch (e:Error) {
trace("Ocorreu um erro!");
}
}
private function bt04_manageEnterFrame(e:Event)
{
if (v_bt04 == false) bt04.gotoAndStop (11);
if (bt04.currentFrame == 5) bt04.stop();
if (bt04.currentFrame == 11) bt04.stop();
}
//Fução para trocar as cores:
private function onEnterFrame(event:Event)
{
var trans:ColorTransform = new ColorTransform;
//Troca de cor fundo:
trans.color = cor0;
fundo.transform.colorTransform = trans;
//Troca de cor fundo menu:
trans.color = cor2;
borda_slide.transform.colorTransform = trans;
//Troca de cor das bullets:
trans.color = cor1;
bullets.transform.colorTransform = trans;
//Troca de cores dos botões:
trans.color = cor2;
bt01.bt01_txt01.txt01.transform.colorTransform = trans;
trans.color = cor1;
bt01.bt01_txt02.txt02.transform.colorTransform = trans;
trans.color = cor2;
bt02.bt02_txt03.txt03.transform.colorTransform = trans;
trans.color = cor1;
bt02.bt02_txt04.txt04.transform.colorTransform = trans;
trans.color = cor2;
bt03.bt03_txt05.txt05.transform.colorTransform = trans;
trans.color = cor1;
bt03.bt03_txt06.txt06.transform.colorTransform = trans;
trans.color = cor2;
bt04.bt04_txt07.txt07.transform.colorTransform = trans;
trans.color = cor1;
bt04.bt04_txt08.txt08.transform.colorTransform = trans;
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
25 Rodrigo // Mar 11, 2009 at 11:30 am
Opa blz André.
Valeu mesmo pela visita ao site.
Confere esse artigo que fala sobre carregamento externo e manipulação de arquivo. É o conceito básico, mas acho que te dá alguma idéia inicial pra você conseguir montar o preloader.
http://www.alvoweb.com/manipulando-carregamento-externo-com-as3/
Abraços.
26 Luana // Abr 16, 2009 at 6:15 pm
Rodrigo, parabéns você tem uma forma MUITO didática de explicar!
Isso que é tutorial!
OBRIGADA MESMO!
27 RBB // Abr 28, 2009 at 12:17 pm
Não preciso nem falar o que eu achei do tutorial. O pessoas aà de cima já falou por mim. De qualquer forma, parabéns.
Estou com uma dúvida: estou migrando um script de AS2 para AS3 e nele tenho um swf que carrega outros, que foram gerados pelo captivate. Em outro frame tenho uma ação “OnEnterFrame” que agora, pelo que entendi deve ser um evento, então transformei o script da seguinte forma:
addEventListener(Event.ENTER_FRAME, fncOnEnterFrame);
function fncOnEnterFrame(evt:Event):void{
if(mc.rdinfoCurrentSlide == (mc.rdinfoSlideCount - 1))
nextFrame();
// removendo o listener
removeEventListener(Event.ENTER_FRAME, fncOnEnterFrame);
}
o mc é o movieclip que criei no palco para carregar os swfs. O certo seria, quando acabasse de reproduzir o swf1, passar automaticamente para o swf2, mas isso não está acontecendo.
Não sei se vc pode me dar uma ajuda, além daquela que já tive ao ler o seu tutorial. De qualquer maneira, obrigado.
28 Manoel // Jun 18, 2009 at 6:55 pm
Olá Rodrigo, usei seu tuto “Carregar imagem externa com Classe Loader AS3″ , um excelente material, deu tudo certo, como tinha de ser, mas eu queria pegar uma daquelas imagens carregadas e move-la no eixo ‘y’ usando a class Tween.
Pode me ajudar?
Obrigado.
29 Rodrigo // Jun 19, 2009 at 2:13 pm
Olá Manoel,
Valeu pela visita ao site.
Você terá que usar a classe Tween, ou outra classe que você conheça pra animação por código(ex: classe Tweener).
http://code.google.com/p/tweener/
O uso do Tween no AS3 é praticamente o mesmo processo usado no AS2.
O que muda é só a maneira como aplica Eventos do Tween, quando terminar animação, fazer outra coisa que precisar.
Help do Flash mostra sobre essa classes.
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/fl/transitions/Tween.html
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/fl/transitions/TweenEvent.html
Outra coisa que você terá que fazer, só poderá aplicar alguma animação a um objeto externo depois que ele for totalmente carregado e visÃvel no stage. Só assim você garante não fazer uma animação antes dele ser carregado.
Você terá que usar a propriedade Loader.contentLoaderInfo, também da classe LoaderInfo, que passa informações para saber por exemplo quando o arquivo for carregado, quando está disponivel, se surgiu erro, etc.
Confira esse tutorial pra ter uma idéia básica dessa parte:
http://www.alvoweb.com/manipulando-carregamento-externo-com-as3/
Abraço.
30 villas // Jul 10, 2009 at 5:15 pm
Cara me salvou o código a tua dica:
var carregarImg:Loader = new Loader();
var enderecoImg:URLRequest = new URLRequest(”Coloque aqui o endereço da imagem”);
carregarImg.load(enderecoImg);
addChild(carregarImg);
Mas e quando eu quero parar a execução o swf que carreguei no frame 1? ele continua mesmo não tendo frames na layer dele ??
poderia me ajudar?
31 Rodrigo // Jul 12, 2009 at 10:31 am
villas,
Não entendi direito o que você quer.
Mas uma vez que é chamado/executado o método Loader.load(),
Ex.:
carregarImg.load(enderecoImg);
o código faz um pedido pra carregar o conteúdo solicitado dentro do método Loader.
Se quer descarregar um conteúdo que foi carregado no objeto Loader, utilize o método Loader.unload();
Se quer cancelar um carregamento que já está em progresso, utilize o método Loader.close();
Mais informações sobre a Classe Loader é uma boa sempre conferir no Help Flash:
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Loader.html#unload()
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Loader.html#close()
Abraço.
32 andre // Ago 4, 2009 at 9:51 am
muito legal o tutorial, parabéns.
mas tenho uma dúvida que me persegue :
em clicar em um botão, eu carrego um arquivo externo, que possui o seu próprio botão “fechar”. não consigo, de maneira alguma, fazê-lo funcionar. pode me dar uma ajuda ? já tentei o unload, removeChild mas nada de conseguir
vlw !!
33 Rodrigo // Ago 5, 2009 at 4:32 am
blz André?
Valeu a visita ao site.
Boa pergunta a sua. Tenha uma manha pra fazer isso. Andei pesquisando e consegui um jeito. Veja se serve pra seu caso.
1º você prepara seu arquivo externo com seu botão “fechar” no stage pra interagir com a função.
Ex: no stage tem um botão fechar com nome de instância fechaBtn
No 1º frame desse arquivo externo, tem o seguinte código:
Compila esse arquivo[ctrl + Enter], isso gera um swf. Esse arquivo já está “pronto” pra interagir com seu arquivo principal onde ele será carregado.
Agora, no seu arquivo principal, você carrega normalmente esse arquivo externo depois que clicar no botão no stage(com instância ex.: carregaBtn) e com isso, quando carregado esse arquivo externo, você consegue clicar no botão do arquivo externo(lembra o fechaBtn?) e dispara uma função que está definida no arquivo principal com nome qualquer como fechaSwf(), e dentro dessa função fechaSwf() que contém o método Loader.unload(), fazendo com que descarrega o seu swf externo através do botão fechaBtn definida no seu arquivo externo.
O código no seu arquivo principal no 1º frame:
Parece confuso. Né? Tente ver o arquivo de exemplo pra você entender o processo.
Link:
http://www.alvoweb.com/download/carrega_e_fecha_swf_externo_as3.zip
Se encontrar outras maneiras de fazer o mesmo, nos avise.
Abraço.
34 Léo Fernandes // Set 15, 2009 at 4:01 pm
Olá Rodrigo,
Inicialmente parabenizo-o pelo tutorial, está excelente, poucas vezes vi na internet conteúdo tão bom e didática de tão fácil compreensão! Apesar de trabalhar com flash há alguns anos, não estou habituado ao actionscript, pois até pouco tempo o “tween shape” e “tween motion” eram o suficiente para meu uso, mas como o mundo gira e as coisas evoluem, tenho que aprender e dominar essa lÃnguagem, e fico feliz por ter encontrado material de tão boa qualidade.
Parabéns, continuarei acompanhando seu trabalho.
Grande abraço,
Léo Fernandes - Dourados - MS
35 Felipe Carvalho // Set 21, 2009 at 3:56 am
Olá Rodrigo,
Vê até onde você consegue me dar uma guia….
Estou apenas alterando um template já feito, meu problema é que tem uma parte(3° pagina) que preciso adicionar mais botoes para ele carregar mais 4 cenas ou arquivos swf diferentes. A cena que estou tentando modificar já esta feita em movieclip e dentro dela tem um texto em scrolled, pois bem tentei usar meu pouco conhecimento em flash add botoes ao lado deste scrolled para que eles pudessem carregar outras Swf em cima desta cena para ir modificando. não obtive sucesso em nada que tentei, se conseguiu entender meu problema tenta me dar uma força.
Obrigado por equanto
36 Guilherme Ferreira // Out 9, 2009 at 3:57 pm
Rodrigo… Parabéns! Sou designer e tenho pouca intimidade com código! Tenho dificuldade de entender algumas coisas… Seu tutorial está excelente! E olha que rodei a web toda atrás de um tutorial bom! Sua didática é excelente!
Um abraço!
37 Uriel // Nov 24, 2009 at 5:50 pm
Rodrigo, tenho uma dificuldade para fazer uma coisa com carre3gadores.
Este exemplo me ajudou a compreender bem.. Só que eu queria de que quando meu arquivo fosse carregado ele viesse com um Tween alpha (ou TweenLite) para um e quando fosse descarregado ele usasse um TweenLite ou Tween para Zero. Só que quando clico em outro botão ele “deleta” o arquivo sem aplicar efeito nenhum.. Qual seria a tática para fazer essas “transições” para um arquivo que vai cerregar e ouytro que ja foi carregado (queria controlar a saÃda dele quando outro for carregado).
Obrigado!!
38 Luiz Claudio // Nov 24, 2009 at 10:36 pm
Caro Rodrigo,
Já perguntei algo para você em como manipular variaveis em AS3, e vou felizmente fazer novamente, agora neste assunto.
Tenho um .swf, que funciona que é uma beleza quando dou um CTRL+ENTER, todas as fotos são carregadas quando eu clico nos botões referentes a elas. Mas quando jogo na Internet as figuras que funcionavam muito bem no TEST MOVIE (CTRL+ENTER), não são carregadas quando o botão é clicado.
Por favor me “help”…..
Acesse
www.aquilesonline.btfweb.eti.br/fotos
e veja por si próprio.
Obrigado mais uma vez.
Luiz Claudio
39 Rodrigo // Nov 25, 2009 at 11:56 pm
Uriel,
Você vai ter que usar manipulação de eventos…repare na sua pergunta:
…quando meu arquivo fosse carregado…
a palavra quando é um evento, então sugiro estudar esses artigos:
Sugiro conferir esses artigos:
http://www.alvoweb.com/basico-sobre-eventos-no-as3/
http://www.alvoweb.com/manipulando-carregamento-externo-com-as3/
Depois que entender estrutura de eventos e como manipular seu arquivo, basicamente no seu caso, bastaria criar funções pra fazer uma determinada tarefa.
Ex:
Uma função pra quando carregar o arquivo mostrar conteudo.
E outra função pra quando descarregar o arquivo desaparecer o conteúdo.
Abraço.
40 Rodrigo // Nov 26, 2009 at 12:00 am
Luiz Claudio,
Seu link não funciona no momento que tive acesso a ele.
Basicamente, os possÃveis erros que você deve verificar antes e depois se seu arquivo carregado está:
- com nome certo(letras minúsculas e maiúculas) e nome de extensão do arquivo;
- se ele existe no local carregado;
- com nome de endereço do arquivo certo tanto no srevidor quanto no código.
Outro detalhe que como você carrega localmente, o arquivo já está na maquina, então não tem tempo de download. Se quer carregar na internet, terá que usar conytrole do carregamento conhecido como eventos….
Sugiro conferir esses artigos:
http://www.alvoweb.com/basico-sobre-eventos-no-as3/
http://www.alvoweb.com/manipulando-carregamento-externo-com-as3/
Abraço.
41 Bruno // Dez 7, 2009 at 6:31 pm
fala Rodrigo,parabéns ae pelo site e por esse tutorial detalhado e muito bem explicado.
Eu estou com um problema em remover o swf externo.Consegui carregar no frame 3 da animação normal,e retirar o swf externo nos outros frames tanto com o remove child,como com o carregador.unload();.
Com o removeChild aparece o erro:
Error#2007: o parametro child nao deve ser nulo
Com o carregador unload aparece:error#1009 não é possivel acessar uma propriedade ou um metodo de uma referencia de objeto nula.
Você pode me ajudar?Tem alguma ideia do que possa ser?
Consegui carregar o swf externo normal,apenas aparece esses erros nos codigos para retirar o externo dos outros frames.
valeu rodrigo
42 Phillip // Jan 4, 2010 at 3:53 pm
muito util seu tutorial. Obrigado
Faça um comentário