Ir para conteúdo

Arquivado

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

Eder Fortunato

Actionscript 3.0

Recommended Posts

Conhecendo o ActionScript 3



Olá pessoal, dando seqüência nos estudos das mudanças feitas no actionScript 3, postarei agora mais novidades da linguagem, um detalhe que devo avisar, é que o conteúdo aqui é voltado principalmente para ajudar a quem esta migrando agora do AS2 para o AS3, e não explicar do zero o AS3, por isso alguns tópicos não estão muito detalhados, e varias vezes eu farei comparações entre o AS2 e como esta agora no AS3(mais vezes do que eu gostaria até Imagem Postada ).


Ok, agora vamos ao que interessa:


Finalmente temos constantes
Alteração no nome das propriedades
Variáveis e funções globais
Criando funções com parâmetros opcionais
Criando funções com números de parâmetros indefinidos
Adicionando ações em botões (detalhado)
Usando o this no Actions Script 3
Diferença entre rollOver e mouseOver, e rollOut e mouseOut
Simulando o onReleaseOutside
Finalmente temos DoubleClick
Cadê o getURL?
Carregamento de imagens ou swf externos
Cadê o attachmovie e o createEmptyMovieClip?
Sprite e SimpleButton
Adicionando comandos a um frame (addFrameScript)

Alterando o frame rate dinamicamente
Exibir a quantidade de memória utilizada
Carregando variáveis de um arquivo txt
Carregando um arquivo XML
Usando o Laço for...in
Usando FlashVars
Desenhando dinamicamente
Criando um Preloader simples




alguns link uteis (em inglês Imagem Postada):

kirupa
senocular

Um passo a passo para iniciar:
Actionscript 3 - First Steps

Guia de referencia, o melhor lugar para aprender:
ActionScript 3 Language Reference

Guia para migração do AS2 para AS3 (muito util):
AS2 to AS3

Videos Tutoriais sobre AS 3
as3.metah.ch


Apostila
Programming ActionScript 3 (PDF)


Arquivos fontes(.FLA) para estudo

Flash ActionScript 3.0 samples(8Mb)
Programming ActionScript 3.0 samples(44Mb)








Aviso

Incentivamos os Membros do fórum a ajudar a aumentar esse material, então se você achou alguma nova funcionalidade do AS3, criou alguma classe ou tem alguma dica, poste na área de Artigos, Dicas, Tutoriais e Matérias, que eu colocarei o link no índice acima :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Finalmente temos constantes

 

 

sim agora elas são reais, não tem mais aquele negocio de declarar a variável e “fingir” que ela é uma constante

 

const ALTURA_MAXIMA:Number = 900;ALTURA_MAXIMA = 10; // Aqui irá acusar um erro
é um convenção em qualquer linguagem de programação declarar as constantes com caixa alta(letras maiúsculas)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Novos tipos de variáveis

 

Os tipos já existentes não sofreram alteração alguma(a não ser internamente para melhorar a performance), as novidades são 2 novos tipos de variáveis numéricas, int e uint.

são elas:

 

[table=Variáveis Numéricas][tr][th=5%]Nome[/th][th=30%]Tipo de valores[/th][th=40%]Faixa de valores[/th][/tr][tr]

intInteiros, negativos e positivosde -2.147.483.648 à 2.147.483.647 (32 bits)[/tr][tr]uintInteiros, apenas positivosde 0 à 4.294.967.295 (32 bits)[/tr][tr]Numberponto flutuante, negativos e positivosde -9,007,199,254,740,992 à 9,007,199,254,740,992 (52 bits)[/tr][/table]

 

 

O tipo Number não é nova, só coloquei para você poder compara-la com os outros tipos

 

com isso é possível concluir que é preferível usar o tipo unit para variáveis usadas como contador num laço FOR, ou para atributos como cores ou tamanhos, ou o int caso seja necessário usar números negativos, porem de uma “pequena” faixa, e usar Number apenas para números de ponto flutuante

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alteração no nome das propriedades

 

 

um detalhe importante no nome das propriedades é que agora não existe mais o _ (underline) antes do nome dela, veja como utilizar:

 

 

objeto_mc.x    = 0;objeto_mc.y    = 0;objeto_mc.width  = 200;objeto_mc.height = 200;
as propriedades _xmouse e _ymouse mudaram de nome, agora são mouseX e mouseY respectivamente o mesmo para as propriedades _xscale e _yscale que agora são scaleX e scaleY respectivamente, outra alteração é nos valores permitidos nesses atributos, antes você deveria colocar um valor entre 0 e 100, a nova maneira esses valores vão de 0 à 1.

veja a diferença:

 

antes:

objeto_mc._xscale = 50;objeto_mc._yscale = 100;
agora:

 

objeto_mc.scaleX = 0.5;objeto_mc.scaleY = 1;

o mesmo vale para a propriedade _alpha os valores vão de 0 à 1.

 

// atribuindo 50% de alphaobjeto_mc.alpha = 0.5;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Variáveis e funções globais

 

 

as variáveis e funções de escopo global(de toda a aplicação) que antes poderiam ser acessadas facilmente com o objeto _global, agora não podem, este objeto foi retirado do AS3, para usa-las, é recomendado você criar uma classe estática, de preferência na pasta raiz da sua aplicação, veja um exemplo da classe:

 

package {        public class Global{                public static var data:Object = new Object();                       }}
como a classe é estática não será preciso instancia-la para usar suas variáveis ou métodos, com isso o uso da classe será assim:

 

Global.data.variavel = "teste"// ou dessa formaGlobal.data["variavel"] = "teste"
o mesmo vale para criar funções globais

Global.data.mostraMenssagem = function():void{                                       trace("Olá")               }Global.data.mostraMenssagem()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criando funções com parâmetros opcionais

 

 

Algumas melhorias foram adicionadas no uso das funções, uma delas é a opção de definir um valor padrão para os parâmetros recebidos.

No AS2 por não existir essa opção erramos obrigados a fazer validações, como essa:

 

Usando AS2:

 

function exibeTexto(numero:Number, texto:String){               if(texto == undefined){                 texto = "ontem";        }                       trace(numero,texto );}exibeTexto(1);  //saída    1, ontemexibeTexto(2, "hoje");//saída   2,  hoje

agora veja como pode ser feito com AS3:

 

function exibeTexto(numero:Number, texto:String = "ontem"){        trace(numero, texto );}exibeTexto(1); //saída    1, ontemexibeTexto(2, "hoje"); //saída   2,  hoje

o mesmo resultado, porem de forma mais estruturada

 

um detalhe a ser lembrado é que os parâmetros opcionais devem ser colocados sempre por ultimo na lista de parâmetros, o exemplo abaixo mostra a forma errada

 

 

function exibeTexto(numero:Number = 2, texto:String){        trace(numero, texto );}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criando funções com números de parâmetros indefinidos

 

 

caso seja necessário cria uma função onde o numero de parâmetros não é definido por padrão, no AS2 tínhamos a classe arguments, esta foi removida e adicionado o Statements " ... "

 

veja como funciona:

 

function testaExtraParams(m:String, ...parans){        trace("primeiro parâmetro:" + m);        trace("segundo  parâmetro:" + parans[0]);        trace("terceiro parâmetro:" + parans[1]);        trace("quarto   parâmetro:" + parans[2]);        trace("-------------------------");}testaExtraParams("gato", "pato");testaExtraParams("gato", "pato", "sapo", "leão");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionando ações em botões (detalhado)

 

 

Uma grande alteração feita no AS3 é que não se pode mais colocar qualquer actions diretamente no objeto, isso mesmo, as ações agora só podem ser colocadas na time-line, para quem usava o flash para fazer coisas simples como banner´s e apresentações, e que as únicas ações que usavam eram um play(), stop() ou getURL(), para essas pessoas a nova sintaxe talvez assuste no começo, mas não é nenhum bicho de 7 cabeças.

 

isso acabou:

 

 

ACTIONSCRIPT

 

on(press){

 

trace("clicou");

 

}

 

 

 

 

o que antes era feito assim:

 

 

 

ACTIONSCRIPT

 

botao_btn.onPress = function(){

 

trace("clicou");

 

}

 

 

 

 

agora no AS3:

 

 

 

ACTIONSCRIPT

 

//criar a função que será executada no click do mouse

function onClick(event:MouseEvent):void {

 

trace("clicou");

 

}

 

// adiciona ao botão um ouvinte, especificando que no

// evento CLICK a função onClick deve ser chamada

botao_btn.addEventListener(MouseEvent.CLICK, onClick);

 

 

 

 

 

não esta é complicado assim fala a verdade Imagem Postada

 

um detalhe no MouseEvent.CLICK, esse parâmetro que foi passado é uma constante que contem a string "click", por isso poderia ser feito dessa forma:

 

 

 

 

ACTIONSCRIPT

 

botao_btn.addEventListener("click", onClick);

 

 

 

 

ou

 

 

 

ACTIONSCRIPT

 

botao_btn.addEventListener("mouseMove", onClick);

 

 

 

 

vai da sua preferência mesmo usar a constante ou o string

 

 

 

agora vamos ver o parâmetro que foi recebido pela função onClick

 

function onClick(event:MouseEvent):void {

 

}

 

 

 

o parâmetro recebido varia dependendo de qual evento o listener foi adicionado, nesse parâmetro (que pode ter qualquer nome, no meu caso eu coloquei "event") esse objeto possui algumas informações sobre o evento que foi chamado, o que varia novamente de evento para evento no caso dos eventos ligados ao mouse, esse objeto possui as seguintes propriedades:

 

vou descrever apenas os mais importantes dessa classe

 

[table=Atributos do objeto MouseEvent][tr][th=20%]Atributo[/th][th=80%]Valor [/th][/tr][tr]buttonDowntrue se o botão primário do mouse estiver pressionado, false caso não esteja (pode ser mais útil no evento mouseMove)[/tr][tr]ctrlKeytrue se a tecla CRTL estiver pressionada quando o botão foi clicado, false caso não esteja[/tr][tr]shiftKeytrue se a tecla SHIFT estiver pressionada quando o botão foi clicado, false caso não esteja[/tr][tr]altKeytrue se a tecla ALT estiver pressionada quando o botão foi clicado, false caso não esteja[/tr][tr]currentTargeté a instancia do objeto que o listener foi adicionado[/tr][tr]localXposição na horizontal em que o objeto foi clicado pelo mouse (equivale a propriedade _xmouse)[/tr][tr]localYposição na vertical em que o objeto foi clicado pelo mouse (equivale a propriedade _ymouse )[/tr][tr]stageXposição na horizontal em que o objeto foi clicado, em relação ao Stage (equivale a propriedade _root._xmouse do AS2)[/tr][tr]stageYposição na vertical em que o objeto foi clicado, em relação ao Stage (equivale a propriedade _root._ymouse do AS2)[/tr][tr]targeté a instancia do objeto que ativou o evento, nem sempre ela será o mesmo objeto do qual o listener foi adicionado, para isso use o currentTarget[/tr][/table]

 

Faça o teste abaixo(lembrando de criar um botão com o nome botao_btn):

 

 

 

ACTIONSCRIPT

 

function onClick(event:MouseEvent):void {

 

trace("o mouse esta pressionado? " + event.buttonDown);

trace("a tecla CTRL esta pressionada? " + event.ctrlKey);

trace("a tecla SHIFT esta pressionada? " + event.shiftKey);

trace("a tecla ALT esta pressionada? " + event. altKey);

trace("objeto que possui o listener:" + event.currentTarget.name);

trace("posição X em relação ao objeto: " + event.localX);

trace("posição Y em relação ao objeto: " + event.localY);

trace("posição X em relação ao Stage: " + event.stageX);

trace("posição Y em relação ao Stage: " + event.stageY);

trace("objeto que ativou o evento:" +event.target.name);

}

botao_btn.addEventListener("click", onClick);

 

 

 

 

percebeu as vantagens do uso de listener no AS3? com o AS2 você também teria acesso a algumas dessas propriedades, mas não de forma tão estruturada e de fácil acesso como esta acima, como eu disse cada evento retornará um objeto com propriedades diferente, consulte o Help do flash ( F1 Imagem Postada ) para ver detalhado cada um deles A diferença entre currentTarget e target, será mostrada mais abaixo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando o this no Actions Script 3

 

A palavra chave this, no AS2 fazia referencia ao objeto onde se encontrava a função, exemplo:

 

function mostraThis(){    trace(this._name); // saida: "botao"}botao.onPress = mostraThis;
Com isso você poderia manipular mais de um objeto com o mesmo código:

 

function mostraThis(){    this._x = 300;    this._y = 300;    trace(this.name); // saída: "botao1" ou "botao2"(o que for clicado)}botao1.onPress = mostraThis;botao2.onPress = mostraThis;

Porem, no AS3 as coisas mudaram, o this, quando usado como no exemplo acima, fará referencia a time-line do objeto onde esta a função, e não mais a ele próprio.

 

function mostraThis (event:MouseEvent) {    trace(this)  //saida  [object MainTimeline]}botao1.addEventListener(MouseEvent.CLICK,mostraThis );botao2.addEventListener(MouseEvent.CLICK,mostraThis );

No caso acima o MainTimeline se refere a time-line principal(onde estava a função),

para utilizar o this como era usado no AS2, você deve usar a propriedade .currentTarget do objeto passado como paramento na função

 

function mostraThis (event:MouseEvent) {    event.currentTarget.x = 100    event.currentTarget.y = 100    trace(event.currentTarget.name) //saida: "botao1" ou "botao2"(o que for clicado)}botao1.addEventListener(MouseEvent.CLICK, mostraThis )botao2.addEventListener(MouseEvent.CLICK, mostraThis )
O currentTarget será sempre o objeto do qual o listener foi adicionado, isso vale para qualquer evento adicionado a um objeto como onEnterFrame, mouseOver, etc. Existe outra propriedade chamada target, cuidado ao usa-la pois ela nem sempre se refere ao objeto que contem o evento, para entender melhor, veja o exemplo abaixo ('Diferença entre "rollOver and rollOut" e "mouseOver and mouseOut"')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diferença entre "rollOver e rollOut" e "mouseOver e mouseOut"

 

 

Como o modo de exibição dos objetos na tela foi alterado no AS3, os eventos ligados ao mouse que manipulavam esses objetos também sofreram algumas mudanças, sobre os eventos mouseMove, mouseOver e mouseOut, eles não são mais ativados em qualquer parte do stage como era no AS2, são ativados apenas no objeto do qual o listener foi adicionado, com isso o mouseOver funcionará como o evento onRollOver(mas não exatamente como veremos em breve), sendo ativados quando o mouse passar por cima botão sendo executados ao mesmo tempo inclusive, veja o exemplo abaixo

 

// cria um sprite que será o botão var bolaAzul:Sprite  = new Sprite();//desenha uma forma para ele, no caso abaixo um circulo bolaAzul.name = "bolaAzul_mc" bolaAzul.graphics.beginFill(0x0000FF);bolaAzul.graphics.drawCircle(100, 100, 50);// adiciona o botão na telaaddChild(bolaAzul);// com MOUSE_OVE e MOUSE_OUTbolaAzul.addEventListener(MouseEvent.MOUSE_OVER, eventoMouseOver);// com ROLL_OVER e ROLL_OUTbolaAzul.addEventListener(MouseEvent.ROLL_OVER, eventoRollOver);function eventoRollOver(evt:MouseEvent):void {    trace("Roll Over em: " + evt.currentTarget.name);}function eventoMouseOver(evt:MouseEvent):void {    trace("Mouse Over em: " + evt.currentTarget.name);}

 

O mesmo vale para os eventos mouseOut e MouseMove

 

 

Agora digamos que você precise usar esses eventos da maneira como eles funcionavam no AS2, sendo ativados em todo o palco, para isso você deverá adicionar o listener ao objeto Stage.

 

exemplo, veja como usar o MouseMove como era usado no AS2

 

//essa variavel será apenas um contador, para vermos a saidavar i:int = 0// adiciona o listener ao Stagestage.addEventListener(MouseEvent.MOUSE_MOVE, conta);function conta(evt:MouseEvent):void {    i++    trace("contador: " +i);}

 

Como vimos acima os eventos RollOver e MouseOver, RollOut e MouseOut fazem a quase a mesma coisa, a diferença esta no alvo que ativou o evento

 

teste o exemplo abaixo que você entenderá melhor

 

// cria um contêinervar todosBotoes:Sprite = new Sprite();todosBotoes.name = "todosBotoes";// cria 2 sprites esses serão a área do “todosBotoes”var bolaAzul:Sprite  = new Sprite();var bolaVerde:Sprite  = new Sprite();bolaAzul.name ="bolaAzul" bolaVerde.name = "bolaVerde"bolaAzul.graphics.beginFill(0x0000FF);bolaAzul.graphics.drawCircle(100, 100, 50);bolaVerde.graphics.beginFill(0x00FF00);bolaVerde.graphics.drawCircle(300, 100, 50);// adiciona a telatodosBotoes.addChild(bolaAzul);todosBotoes.addChild(bolaVerde);addChild(todosBotoes);// teste 1º com os eventos ROLL_OVER e ROLL_OUT, e veja a saída no painel output// depois comente essas 2 linha e dêscomente as linha após delas com MOUSE_OVE e MOUSE_OUT// e veja a diferença // com ROLL_OVER e ROLL_OUTtodosBotoes.addEventListener(MouseEvent.ROLL_OVER, over);todosBotoes.addEventListener(MouseEvent.ROLL_OUT, out);// com MOUSE_OVE e MOUSE_OUT//todosBotoes.addEventListener(MouseEvent.MOUSE_OVER, over);//todosBotoes.addEventListener(MouseEvent.MOUSE_OUT, out);function over(evt:MouseEvent):void {    trace("over: " + evt.target.name);}function out(evt:MouseEvent):void {    trace("out: " + evt.target.name);}

 

 

Quando se usa o evento RollOver e RollOut o target, ou seja, o objeto que chamou a função, se refere ao próprio objeto em que o listener foi adicionado, nesse caso o objeto todosBotoes, já nos eventos MouseOver e MouseOut o target se refere ao objeto dentro de todosBotoes que o mouse passou por cima.

Caso você queria utilizar os eventos MouseOver e MouseOut e fazer referencia ao objeto todosBotoes, use a propriedade "evt.currentTarget" ou invés de "evt.target"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simulando o onReleaseOutside

 

 

O evento onReleaseOutside foi retirado do actionScript 3, então vamos fazer um "ajuste técnico" para simular esse evento.

 

Ele consiste em aplicar um listener ao evento mouseUP do stage(do palco todo) assim que o mouse for pressionado no botão, nesse mouseUP devemos verificar se o mouse esta sobre o mesmo botão que foi pressionado (o que resultaria num Release) ou se ele não estava sobre esse botão(resultando no ReleaseOutside)

 

exemplo:

// cria uma bola que será o botãovar circle:Sprite = new Sprite();circle.graphics.beginFill(0xFF0000);circle.graphics.drawCircle(200, 200, 50);addChild(circle);circle.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);function mouseDown(event:MouseEvent):void {    //esse listener irá aguardar o mouseUP am qualquer lugar do documento (Stage)    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);}function mouseUp(event:MouseEvent):void {    if (event.target == circle){        // o codigo abaixo será executado no Release  do botão        trace('onRelease')                    }else{        // o codigo abaixo será executado no onReleaseOutside  do botão        trace('onReleaseOutside')         }       //remove o listener  mouseUP    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Finalmente temos DoubleClick

 

Um evento que fazia falta a um bom tempo no ActionScript é o duplo-click, finalmente o pessoal da Adobe resolveu esse problema adicionando esse evento ao AS3, um detalhe que você não deve esquecer é setar como true a propriedade doubleClickEnabled, caso contrario não irá funcionar.

veja um exemplo dele:

 

// cria uma bola que será o botãovar circle:Sprite = new Sprite();circle.graphics.beginFill(0xFF0000);circle.graphics.drawCircle(200, 200, 50);addChild(circle);//você deve ativa essa propriedade para usar o duplo-clickcircle.doubleClickEnabled = truecircle.addEventListener(MouseEvent.DOUBLE_CLICK, onDobleClick);function onDobleClick(event:MouseEvent):void {    trace("duplo-click");}

Porem existe um detalhe que pode prejudicar sua aplicação caso você queria atribuir a um botão uma ação no evento Click e outra ação no evento DobleClick do mesmo botão

 

Faça o teste abaixo dando um duplo-click no botão

 

 

// cria uma bola que será o botãovar circle:Sprite = new Sprite();circle.graphics.beginFill(0xFF0000);circle.graphics.drawCircle(200, 200, 50);addChild(circle);circle.doubleClickEnabled = truecircle.addEventListener(MouseEvent.DOUBLE_CLICK, onDobleClick);circle.addEventListener(MouseEvent.CLICK, onClick);function onDobleClick(event:MouseEvent):void {    trace("duplo-click");}function onClick(event:MouseEvent):void {    trace("click");}

a saída será

 

click

doble click

 

Ou seja ele executou o evento click primeiro clique, e no segundo clique o DobleClick, quando o "correto" seria executar apenas o duplo-click.

Podemos resolver esse "probleminha" de maneira simples

veja:

 

var isDobleClick:Boolean;var espera:Timer;// cria uma bola que será o botãovar bolaAzul:Sprite  = new Sprite();bolaAzul.graphics.beginFill(0x0000FF);bolaAzul.graphics.drawCircle(100, 100, 50);// adiciona a telaaddChild(bolaAzul);bolaAzul.doubleClickEnabled = true;bolaAzul.addEventListener(MouseEvent.CLICK, onClick);bolaAzul.addEventListener(MouseEvent.DOUBLE_CLICK, onDobleClick);function onClick(event:MouseEvent):void{         isDobleClick = false;         espera = new Timer(200, 1);         espera.addEventListener(TimerEvent.TIMER, controlaClick);         espera.start();         if (event.ctrlKey) {            isDobleClick = true;         }}function onDobleClick(event:MouseEvent):void{         isDobleClick = true;}function controlaClick(event:TimerEvent):void{     if (isDobleClick == false) {        trace("click");     } else {        trace("doble click");     }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cadê o getURL?

 

Uma outra ação muito utilizada, é o getURL para abrir uma pagina html, ou executar um comando em javaScript, no AS3 ele foi trocado pelo comando navigateToURL.

 

veja como fazer:

 

 

function onclick(event:MouseEvent):void {        // cria a string com o  endereço(URL)        var url:String  = "http://www.imasters.com.br";'>http://www.imasters.com.br";        //cria o objeto com o endereço(URL) a ser carregado        var pagina:URLRequest = new URLRequest(url);        //abre a pagina na mesma janela do navegador        navigateToURL(pagina, "_self");}botao_btn.addEventListener("click", onclick);

Repare que o frame em que a pagina abrirá deve ser colocado no comando navigateToURL.

 

Também pode ser feito em uma única linha:

 

 

function onclick(event:MouseEvent):void {        navigateToURL(new URLRequest("http://www.imasters.com.br"), "_self");}botao_btn.addEventListener("click", onclick);

se fosse um comando javascript

 

 

function onclickevent:MouseEvent):void {        // cria a string com o  javascript        var js:String  = "java script:alert('ola!');";               //cria o objeto com o comando        var pagina:URLRequest = new URLRequest(js);               //abre a pagina na mesma janela do navegador        navigateToURL(pagina, "_self");}botao_btn.addEventListener("click", onclick);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carregamento de imagens ou swf externos

 

Agora não tem mais o loadMovie(), para carregar swfs/imagens use a classe Loader

 

Comentei o codigo linha por linha para ficar mais fácil

 

//cria o objeto que carregarávar carregador:Loader = new Loader();//inicia o carregamentocarregador.load(new URLRequest("preview.swf"));//adiciona o swf ao palcoaddChild(carregador);//posiciona no lugar corretocarregador.x = 10;carregador.y = 10;

 

Para carregar dentro de um movieClip especifico que esteja no palco use a função addChild();

 

//adiciona o swf carregado no movieClip chamado "holder_mc" que já está no palcoholder_mc.addChild(carregador);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cadê o attachmovie e o createEmptyMovieClip?

 

 

Tanto o attachmovie quando o createEmptyMovieClip foram removidos no AS3, a sintaxe para criar um movieClip vazio agora será esta:

 

var objeto_mc:MovieClip = new MovieClip ()
É a mesma sintaxe que se usa para instanciar um objeto, e é isso mesmo que você fez, criou um novo objeto instanciado da classe MovieClip, porém após cri-lo ele ainda não foi

adicionado ao palco, para fazer-lo use o comando addChild()

 

addChild(movie_mc)
Ok, você adicionou ele mas não aparece nada, faltou desenhar a forma do movieClip,usaremos aqui as novas funções de desenho, alem das funções que ja existiam para desenho (lineTo() e curveTo() ), agora temos algumas funções que ja desenham uma forma geométrica.

veja como criar um criculo azul dinamicamente

 

// cria o movieClipvar objeto_mc:MovieClip = new MovieClip ()// desenha um criculo neleobjeto_mc.graphics.beginFill(0x0000FF);objeto_mc.graphics.drawCircle(100, 100, 50);//adiciona o mc na telaaddChild(movie_mc)

você pode alterar as propriedades desse movieClip tanto antes como depois de adiciona-lo ao palco

 

// cria o movieClipvar objeto_mc:MovieClip = new MovieClip ()// desenha um criculo neleobjeto_mc.graphics.beginFill(0x0000FF);objeto_mc.graphics.drawCircle(0, 0, 50);//altera a posição antes de adicionar na telaobjeto_mc.y=50//adiciona o mc na telaaddChild(movie_mc)//altera a posição depois de adicionar na telaobjeto_mc.x=200

 

Já o attachmovie segue o mesmo principio de antes, você continua tento que marcar na biblioteca a opção linkage do symbolo que será "athachado", veja a caixa baixo:

 

Imagem Postada

 

Para adiciona-lo a tela você deve fazer do mesmo modo mostrado acima, mas a classe usada para instanciar o objeto deverá ser o nome que você determinou no linkage do símbolo na biblioteca

 

Exemplo, após criar um símbolo no flash, vá a biblioteca clique com o botão direito do mouse nesse símbolo, e selecione a opção linkage, e escreva no campo linkage de "TesteMC", clique em OK

 

Será exibida uma mensagem perguntando se você deseja que o flash crie uma classe para associar esse movieClip, clique em OK

 

Esse símbolo agora será tratado como uma classe , para athacha-lo no palco agora basta instancia-lo

 

var novo_mc:TesteMC = new TesteMC()addChild(novo_mc)

Vamos supor que você precisa athachar esse movieCLip no palco, a partir de uma string com o nome dele, como era feito no AS2, veja como fazer:

 

//a partir da string "TesteMC" será criada uma classevar movieClipClase:Class = getDefinitionByName("TesteMC") as Class;// instanciando objetovar novo_mc:DisplayObject = new movieClipClase();//adicionando o objeto no palcoaddChild(novo_mc);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sprite e SimpleButton

 

Uma coisa bem sensata que fizeram no AS3 foi desmembrar a classe movieClip, agora foram criadas mais 2 subclasses da classes a partir dela MovieClip (na verdade existem outras), são elas Sprite e SimpleButton.

 

 

Sprite: É a classe mais básica para criar um objeto visual ou contêiner (usado para conter outros tipos de objetos visuais), ela não possui time-line com um MovieClip, então é mais indicada para substituir a MovieClip fazer desenhos dinâmicos, por ser mais leve.

 

Um exemplo simples do uso dela

 

public function criaBola(e:MouseEvent):void {      var sp:MovieClip = new MovieClip();     sp.graphics.beginFill(Math.round(Math.random() * 0xffffff));     sp.graphics.drawCircle(e.stageX, e.stageY,Math.round( Math.random() * 20));     addChild(sp)}stage.addEventListener(MouseEvent.MOUSE_MOVE, criaBola);

SimpleButton: É a classe usada para manipulação de botões, ao se criar um botão no flash criando um simbolo do tipo "button", é um objeto dessa classe que será criado, então você pode usar essa mesma classe para manipula-lo, usando as propriedades upState, downState e overState, é possivel editar em tempo de executão os estados Up, Down e Over do botão.

 

veja o exemplo abaixo de como criar uma botão e definir os seus estados(Up, Down e Over) tudo isso dinamicamente.

 

// cria 3 formas na tela, uma de cada cor e na mesma posiçãovar bolaAzul:Sprite = criaBola(0x0000FF, 50, 50, 25);var bolaVerde:Sprite = criaBola(0x00FF00, 50, 50, 25);var bolaAmarela:Sprite = criaBola(0xFFFF00, 50, 50, 25);// instancia um objeto da classe SimpleButtonvar botao:SimpleButton = new SimpleButton();// adiciona cada forma a um estado do botão     botao.upState          = bolaAzul;botao.downState      = bolaVerde;botao.overState      = bolaAmarela;// essa propriedade sera a area de hit do botão,// usaremos um das formas acima      botao.hitTestState   = bolaAzul;// adiciona no palco o botãoaddChild(botao);// função para criar os circulos usados no botãopublic function criaBola(cor:int, x:int, y:int, rad:int):Sprite {      var sp:Sprite = new Sprite();      sp.graphics.beginFill(cor);      sp.graphics.drawCircle(x, y, rad);      return sp;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionando comandos a um frame (addFrameScript)

 

 

Essa é uma função não documentada no AS3, com ela você tem a possibilidade de adicionar um código qualquer, que será executado quando o movieClip chegar num frame especificado.

 

a sintaxe dele é esta:

 

MovieClip.addFrameScript(frame:int, method:Function, [frame:int, method:Function...]):void;
Sempre passando os parâmetros aos pares, numero do frame + função a ser executada

 

Exemplo de uso:

 

crie um arquivo .AS chamado "FuncaoFrames.as", com os seguinte código:

 

 

package {       import flash.display.MovieClip;       public class FuncaoFrames extends MovieClip {               public function FuncaoFrames(){            addFrameScript(2, onFrame3, 5, onFrame3);        }               public function onFrame3():void {            trace("você esta no frame 3: "+currentFrame);        }        public function onFrame6():void {            trace("você esta no frame 6: "+currentFrame);        }    }}
Salve essa classe na mesma pasta que o seu arquivo .FLA, nesse mesmo arquivo(o .FLA) no painel de propriedades tem um campo de texto chamado "Document classe "(esse campo não existe nos documentos feitos com AS2):

 

Imagem Postada

 

nesse campo digite o nome da classe "FuncaoFrames.as" para associar a classe ao .FLA.

 

 

 

para remover uma função use o mesmo comando passando null no lugar da função:

 

 

addFrameScript(2,  null);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterando o frame rate dinamicamente

 

 

 

Pois é pessoal agora é possível mudar a quantidade de frames por segundo em tempo de execução, os valores validos estão entre 0.01 e 1000

 

 

 

// para isso basta setar a propriedade frameRatestage.frameRate = 12;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exibir a quantidade de memória utilizada

 

 

Para saber o quanto de memoria RAM(em bytes) seu filme esta usando enquanto roda use a propriedade System.totalMemory, aproveitando vou colocar como usar o onEnterFrame

 

 

function onEnter(event:flash.events.Event ) {       //Mostra quando de memória esta sendo consumida no momento    trace(System.totalMemory);}addEventListener(flash.events.Event.ENTER_FRAME , onEnter);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carregando variáveis de um arquivo txt

 

A classe LoadVars deu lugar para a URLLoader que também é usada para carregar arquivos XML, mas não para manipulação deles, para isso ainda existe a classe XML

 

Um exemplo de carregamento de txt:

 

Crie um arquivo texto com o seguinte conteúdo

 

nome=maria&idade=25

 

e salve como "arquivo.txt", na mesma pasta onde esta o seu .FLA

 

o código para carregar é esse

 

 

//cria o objeto com o endereço(URL) a ser carregadovar endereco:URLRequest = new URLRequest("arquivo.txt")//cria o objeto que carregarávar loader:URLLoader = new URLLoader();//Específica o tipo de dado a ser carregadoloader.dataFormat = URLLoaderDataFormat.VARIABLES;//Função a ser executada quando o carregamento acabarfunction loadCompleto(event:Event):void {    trace(loader.data.nome);    trace(loader.data.idade);}//adiciona a função ao Listenerloader.addEventListener(Event.COMPLETE, loadCompleto);//carrega o arquivo txtloader.load(endereco);

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.