Vanilson 2 Denunciar post Postado Outubro 11, 2010 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
Irineu Antunes 2 Denunciar post Postado Outubro 11, 2010 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 12, 2010 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
Irineu Antunes 2 Denunciar post Postado Outubro 12, 2010 Bersek existe clearTimeout sim! http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/flash/utils/package.html#clearTimeout() E já que só clica uma vez no botão, então não há necessidade de se usar o Timer. E acho que isto está indo além da dúvida do usuário, se segura ae ;) Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 12, 2010 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
Vanilson 2 Denunciar post Postado Outubro 13, 2010 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 13, 2010 Repetido como?? TweenLite não tem yoyo()??? Não entendi o que você quer fazer. PS: yoyo é fazer o mesmo efeito só que contrario na classe Tweener. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Vanilson 2 Denunciar post Postado Outubro 13, 2010 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 13, 2010 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
Irineu Antunes 2 Denunciar post Postado Outubro 14, 2010 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