ENTER_FRAME em ActionScript 3.0

olá pessoal vamos este post vai falar como o título sugere ENTER_FRAME esse post vai para meus ex-alunos que usam as2.0 o velho onEnterFrame do AS2.0 que usávamos assim :

1. this.onEnterFrame = function():Void{

2.  //faz alguma coisa

3. }

Em AS3.0 isso mudou totalmente e podemos dizer pra melhor. agora podemos gerenciar mais de um ENTER_FRAME facilmente, como no exemplo abaixo:

1. stage.addEventListener(Event.ENTER_FRAME, minhaFuncao);

2. function minhaFuncao(e:Event):void{

3. // faz alguma coisa

4. }

Na linha 1 adicionamos o evento ENTER_FRAME no stage(palco) passamos como parâmetro a função que vai ser chamada, no nosso caso “minhaFuncao” agora vamos incrementar nosso exemplo:

  • Crie um movieClip no palco com nome de instância bola_mc com o registration no canto inferior (a base)
  • Crie uma nova layer , coloque o seu nome ações.
  • Selecione o primeiro frame e pressione “F9″ para abrir a janela de ações e insira o seguinte código

1. var velocidade:int = 5;
2. stage.addEventListener(Event.ENTER_FRAME, moveBola);

3. function moveBola(e:Event):void{
4.    if(bola_mc.y < stage.stageHeight){
5.           bola_mc.y += velocidade
6.    }else{
7.        stage.removeEventListener(Event.ENTER_FRAME, moveBola);
8.    }
9. }

Na linha 1 criamos uma variável velocidade do tipo int (inteiro) e definimos como 5, em seguida adicionamos o evento ENTER_FRAME e falamos moveBola é a função que será disparada. Dentro da função moveBola tem um if que verifica se o y da bola é menor que a altura do stage (stageHeight) “se sim” incrementa a velocidade na propriedade y da bola. “se não” removemos na linha 7  o evento ENTER_FRAME com removeEventListener que neste caso é equivalente ao delete onEnterFrame do AS2.0. Veja o Primeiro exemplo abaixo.

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

No exemplo anterior a velocidade da bola é constante vamos adicionar um efeito de aceleração:

01. var velocidade:Number = 0;
02. var aceleracao:Number = 0.2;
03. stage.addEventListener(Event.ENTER_FRAME, moveBola);

04. function moveBola(e:Event):void{
05.    if(bola_mc.y < stage.stageHeight){
07.           velocidade += aceleracao;
06.           bola_mc.y += velocidade
07.    }else{
08.        stage.removeEventListener(Event.ENTER_FRAME, moveBola);
09.    }
10. }

Foi modificado o tipo da variável velocidade para number porque agora vamos trabalhar com números fracionados e agora ela é iniciada com zero, foi acrescentado a variável aceleracao um Number com o valor de 0.2 e na linha 7 incrementamos a velocidade com a aceleração e em seguida o a propriedade y com a velocidade. Veja o resultado abaixo

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Vamos colocar um pouco mais de física nesse exercício:

1. var velocidade:Number = 0;
2. var aceleracao:Number = 1;

3. stage.addEventListener(Event.ENTER_FRAME, moveBola);

4. function moveBola(e:Event):void{
5.    if(bola_mc.y + velocidade < stage.stageHeight){
6.        velocidade += aceleracao;
7.        bola_mc.y += velocidade
8.    }else{
9.        velocidade = velocidade * -1;
10.    }
11.}

Foi modificada a aceleração para 1, na linha 5 dentro da condicional do if colocamos bola_mc.y + velocidade isso para evitar que a bola saia do palco e por fim na linha 9 tiramos o código para remover o ENTER_FRAME e trocamos pelo seguinte código velocidade = velocidade * -1 isso seria a seguinte efeito quando a bola tocasse no solo ela receberia a mesma força inversamente. O Resultado vemos abaixo :

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Espero que tenham gostado.

Até a próxima.

Esta entrada foi publicada em Flash, Tutoriais e marcada com a tag , , . Adicione o link permanenteaos seus favoritos.

2 respostas a ENTER_FRAME em ActionScript 3.0

  1. Augusto disse:

    Muito legal o efeito e a lógica. Gostaria de saber como inserir um efeito simples de desaceleração para um objeto a ser usado, por exemplo, em uma máscara de transição.

  2. Fellyph disse:

    pode ser usado sim, o ideal é utilizar uma classe de animação e utilizar um efeito de easing no seu gosto..

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">