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.

[flash https://www.fellyph.com.br/blog/wp-content/uploads/2008/08/enter_frame2.swf w=450 h=400]

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

[flash https://www.fellyph.com.br/blog/wp-content/uploads/2008/08/enter_frame_aceleracao.swf w=450 h=400 mode=1]

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 :

[flash https://www.fellyph.com.br/blog/wp-content/uploads/2008/08/enter_frame_aceleracao_2.swf w=450 h=400]

Espero que tenham gostado.

Até a próxima.

2 respostas para “ENTER_FRAME em ActionScript 3.0”

  1. 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.

Deixe uma resposta

This site uses Akismet to reduce spam. Learn how your comment data is processed.