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.
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
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 :
Espero que tenham gostado.
Até a próxima.
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.
pode ser usado sim, o ideal é utilizar uma classe de animação e utilizar um efeito de easing no seu gosto..