Ir para conteúdo

POWERED BY:

Arquivado

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

Vanilson

Fazer uma imagem durar algum tempo antes de mostrar a outra com AS3

Recommended Posts

Pessoal estou com um problema que talvez seja basico e normalmente eu resolvo isso fazendo a animação na timeline mais agora quero saber como faço via AS3, eu tenho uma animação que funciona na perfeição que faz a imagem movimentar-se depois de clicar em um botão, agora eu quero fazer ela movimentar-se sem a necessidade de eu clicar em um botão, a minha dificuldade está em estabelecer um tempo determinado que a imagem ira ficar no mesmo lugar, eis o codigo a AS que tenho:

 

import com.greensock.TweenLite;
avancar_btn.addEventListener(MouseEvent.CLICK, avancar)
TweenLite.to(recuar_btn,1,{alpha:0});
function avancar(e:Event):void
{
	TweenLite.to(banner, 1, {x:-1});
	TweenLite.to(avancar_btn,1,{alpha:0});
	TweenLite.to(recuar_btn,1,{alpha:1});
	
}
recuar_btn.addEventListener(MouseEvent.CLICK, recuar)
function recuar(e:Event):void
{
	TweenLite.to(banner, 1, {x:1031});
	TweenLite.to(avancar_btn,1,{alpha:1});
	TweenLite.to(recuar_btn,1,{alpha:0});
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo é uma dúvida muito interessante e muito simples:

 

setTimeout(NomeDaFunção:Function, delay:Number //opcional: [,args:Object]);

 

resumindo:

 

//o tempo deve ser dado em ms: 1000ms = 1seg
setTimeout(fcnTeste, 5000);

function fcnTeste():void{
 trace("depois de 5 segs esta função foi executada!");
}

 

Espero que isto possa ter sido esclarecido ;)

 

PS: para limpar o timeout:

 

clearTimeout(nome_do_intervalo);

 

 

http://www.alvoweb.com/setinterval-e-settimeout-flash/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Time out não tem clear... ele executa 1 vez depois que o tempo acabar.

 

Se você usar setInterval... que não existe em AS 3 e sim AS 2

Ai você tem que usar clearInterval pois ele executa de intervalo a intervalo setado por você

 

setInterval mudou para função TIMER em as 3.0

 

var timer:Timer = new Timer(1000, 2);
	timer.addEventListener(TimerEvent.TIMER, blah);
	timer.start();

function blah(e:TimerEvent):void{
 	trace("Times Fired: " + e.currentTarget.currentCount);
 	trace("Time Delayed: " + e.currentTarget.delay);
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que existe eu sei e funciona perfeitamente

 

Mas o correto substituido por ele é a função TIMER como dita

Eu não disse que ele deixou de existir ;)

 

Só disse que foi alterado... mesma coisa que algumas funções de PHP que são deprecated... elas funcionam mas não são as ideais para serem usadas

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Irineu e Berseck valeu pela ajuda, testei o setTimeout e funciona perfeitamente no entanto me ocorreu uma nova ideia que não funciona obtenho erros, é que para além de fazer eles se deslocarem no eixo X eu pretendo que este processo seja repetitivo para isso alterei o cod para o seguinte:

 

import com.greensock.TweenLite;

TweenLite.to(recuar_btn,1,{alpha:0});
avancar_btn.addEventListener(MouseEvent.CLICK, avancar);
recuar_btn.addEventListener(MouseEvent.CLICK, recuar);

avancar_automatico();
recuar_automatico();

function avancar_automatico():void {
	TweenLite.to(banner, 1, {x:-1, onComplete:setTimeout(recuar_automatico, 10000)});
}
function recuar_automatico():void {
	TweenLite.to(banner, 1, {x:1031, onComplete:setTimeout(avancar_automatico, 5000)});
}
/*Função do botão avançar*/
function avancar(e:Event):void {
	TweenLite.to(banner, 1, {x:-1});
	TweenLite.to(avancar_btn,1,{alpha:0});
	TweenLite.to(recuar_btn,1,{alpha:1});

}
/*Fim da função do botão avançar*/
/*Função do botão recuar*/
function recuar(e:Event):void {
	TweenLite.to(banner, 1, {x:1031});
	TweenLite.to(avancar_btn,1,{alpha:1});
	TweenLite.to(recuar_btn,1,{alpha:0});
}
/*Fim da função do botão recuar*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Berseck, o objectivo das minhas funções avançar_automatico() e recuar_automatico() é de movimentar a imagem no eixo x e depois voltar a colocar ela no mesmo lugar que estava antes, então eu quero que esse processo de avançar e recuar seja repetido n vezes pq do jeito que tá ele so avança e recua uma unica vez... Espero ter ajudado a entenderes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então faça como o amigo falou

 

Utilize setInterval com 1 variavel que indique uma posição ou outra

tipo um controlador que vai fazer uma função ou outra

 

Exemplo:

var verifica = true;
setInterval (auto, 10000);

function auto(){
 if(verifica == true) {
	dispatchEvent(new Event(avançar));
	verifica = false;
 }else {
 	dispatchEvent(new Event(recuar));
 	verifica = true;
 }
}

function avancar(e:Event):void {
 TweenLite.to(banner, 1, {x:-1});
 TweenLite.to(avancar_btn,1,{alpha:0});
 TweenLite.to(recuar_btn,1,{alpha:1});

}

function recuar(e:Event):void {
 TweenLite.to(banner, 1, {x:1031});
 TweenLite.to(avancar_btn,1,{alpha:1});
 TweenLite.to(recuar_btn,1,{alpha:0});
}

O código tem que ser algo assim... não sei se vai funcionar pois não testei... de uma verificada se dispatchEvent é assim que se faz.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra dispachar tem que extender o EventDispatcher,

não é bom complicar mas sim simplificar ;)

 

Melhor fazer assim (note que alterei o metodo avancar pro handlerAvancar, você deve alterar tmb no addEventlistener dele, pq eu deixei numa estrutura melhor o código ;)):

 


//setTimeout(closure:Function, delay:Number, ... arguments):uint
//estou sem pc, estou no da facul por isto não testei.
var temp:uint = 0;

//A funcao avancar/recuar é comum pro timeout e click do botao
//reaproveitei o código fazendo uma função de alta coesão ;)
function handlerAvancar(e:Event):void {
 avancar();
}

//o mesmo se adapta a este caso
function handlerRecuar(e:Event):void {
 recuar();
}


function avancar():void {
 //limpa o timeout independente de qual seja
 clearTimeout(temp);
 TweenLite.to(banner, 1, {x:-1});
 TweenLite.to(avancar_btn,1,{alpha:0});
 TweenLite.to(recuar_btn,1,{alpha:1});
 //re-cria o timeout
 doTimeout();
}

function recuar():void {
 clearTimeout(temp);
 TweenLite.to(banner, 1, {x:1031});
 TweenLite.to(avancar_btn,1,{alpha:1});
 TweenLite.to(recuar_btn,1,{alpha:0});
 doTimeout();
}

//este método é comum para o recuar e avancar, futuras implementacoes podem ser feitas aqui.
function doTimeout():void{
 setTimeout(avancar,5000);
}

Vanilson, faz um teste, se der algum problema poste aqui o output (saída) ;)

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.