ddlightw 0 Denunciar post Postado Janeiro 30, 2012 Eu criei um slideshow simples e tive problemas com botão, às vezes clicava e não funcionava. Utilizei um mesmo botão com nomes de instâncias diferentes, coloquei a ação nos quadros 2 e 3 que estavam os botões, porque se coloca nos quadros que o botão não existe dá um erro de timeline. O mesmo não acontece com o gotoAndStop(). Compartilhar este post Link para o post Compartilhar em outros sites
marcos.cardoso 10 Denunciar post Postado Janeiro 31, 2012 Então, é preciso saber que código você está usando para esse nextFrame(), se esse código está dentro de algum objeto e qual objeto seria esse e é preciso saber também qual objeto você quer enviar para o nextFrame. Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Abril 1, 2012 Geralmente são 6 imagens e eu coloco em uma layer 6 frames, nesse caso cada botão vai para o Frame 2, 3 e assim em diante. Não sei porque, algumas vezes ele pulava um frame. Exemplo do código: voltar_btn.addEventListener(MouseEvent.CLICK, voltaSlide, false, 0, true); avancar_btn.addEventListener(MouseEvent.CLICK, avancaSlides, false, 0, true); function voltaSlide(e:MouseEvent):void { gotoAndStop(1); } function avancaSlides(e:MouseEvent):void { gotoAndStop(2); } Se eu utilizar um botão para avançar com o mesmo nome de instancia e deixar o código no frame 1 da Timeline pode causar esse problema? Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Abril 17, 2012 Eu sei que o certo dessa linguagem seria criar uma programação estruturada com classes, mas exige certo conhecimento e tempo, então eu preciso improvisar. Eu sempre preciso de um voltar e um próximo, mas eu não queria que um não aparecesse no primeiro e o outro no último frame, improvisei um código, só que ele conta o número de frames a partir do clique e se eu coloco nextFrame() antes do if ele pula 1 frame, alguém sabe porque isso acontece? Tentei deixar o botão avançar só no frame 2, mas dá erro de timeline e eu tenho que deixá-lo invisível, o que acontece que parece que o código do frame 1 não passa para os outros frames? Já fiz curso, mas conforme você muda o código e a disposição dos movieclips, algo deixa de funcionar. stop(); var labels:Array = this.currentLabels; for (var i:uint = 0; i < labels.length; i++) { var label:FrameLabel = labels[i]; trace("frame " + label.frame + ": " + label.name); } if(currentFrame == 1) { voltar_btn.visible = false; } trace(currentLabel); avancar_btn.addEventListener(MouseEvent.CLICK, avancaSlide); function avancaSlide(e:MouseEvent):void { if(this.currentFrame == 1){ voltar_btn.visible = true; } //trace(currentFrame); trace(currentLabel); if(this.currentLabel == "quinto") { this.gotoAndStop("primeiro"); }else { nextFrame(); } } voltar_btn.addEventListener(MouseEvent.CLICK, voltaSlide); function voltaSlide(e:MouseEvent):void { prevFrame(); } Imagens do stage e da timeline: http://www.freeimagehosting.net/3jxfa http://www.freeimagehosting.net/ab1fg Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Abril 22, 2012 Vê se ajuda (no exemplo, há uma tween para deslocamento das imagens, aninhadas lado a lado em um movie clip, exibida através de uma máscara): stop(); //EventListeners que vão cuidar dos cliques nos botões dir_btn.addEventListener(MouseEvent.CLICK, proximo); esq_btn.addEventListener(MouseEvent.CLICK, anterior); function proximo(me:MouseEvent):void { //EventListener que cuida o evento de ENTER_FRAME, //evento que é disparado na mesma velocidade do fps stage.addEventListener(Event.ENTER_FRAME, onFramesNext); } function anterior(me:MouseEvent):void { stage.addEventListener(Event.ENTER_FRAME, onFramesPrev); } // função que é chamada na mesma velocidade do fps function onFramesNext(e:Event):void { //manda pro próximo frame nextFrame(); //verifica se o frame atual é o frame 30 if(currentFrame == 30) { //se for o frame 30, remove o EventListener, ou seja, //paramos a animação stage.removeEventListener(Event.ENTER_FRAME, onFramesNext); } if(currentFrame == 60) { stage.removeEventListener(Event.ENTER_FRAME, onFramesNext); } if(currentFrame == 90) { stage.removeEventListener(Event.ENTER_FRAME, onFramesNext); } } function onFramesPrev(e:Event):void { prevFrame(); if(currentFrame == 60) { stage.removeEventListener(Event.ENTER_FRAME, onFramesPrev); } if(currentFrame == 30) { stage.removeEventListener(Event.ENTER_FRAME, onFramesPrev); } if(currentFrame == 1) { stage.removeEventListener(Event.ENTER_FRAME, onFramesPrev); } } Abs ;) Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Abril 30, 2012 Muito obrigado, testei o seu código. Mas percebi o que estava acontecendo, ao clicar nextFrame ele estava contando certo, mas o problema era quando ele chegava no último frame e voltava para o primeiro, ele estava contando 1 duas vezes e acrescentava só no clique do mouse + 1. Assim, clicava até 5, no 5 eu pedia para mandar para 1 com gotoAndPlay, ele obedecia, mas não entendi porque ele só contava a partir do clique não contava o 1, contava a partir do 2 que era quando eu clicava nextFrame(). Vi no trace(), então mudei as contas para funcionar. Agora o problema é deixar de aparecer o botão nextFrame() quando chega no final e tirar do inicio o botão do prevFrame. Estou improvisando, coloco o código visible na layer que eu não quero que aparece. Tive uns problemas com condições de if e else, por exemplo se está no último frame o botão some senão se estiver em qualquer outro frame ele fica vísivel, só que não funciona. Funciona o if, mas não o else. Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Maio 1, 2012 Depende, se você quer criar um loop (esquerda/direita) com os botões next/prev precisa ajustes. Se usar ENTER_FRAME, faça a verificação com currentFrame/totalFrame. Defina inicialmente (fora da função): esq_btn.visible = false; Depois, dentro da função next/prev, ao verificar o frame (if), altere para visible = true; Poste sua tentativa, facilita para tentar auxiliar. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
ddlightw 0 Denunciar post Postado Maio 13, 2012 Funcionou e ficou dessa forma: stop(); var labels:Array = this.currentLabels; for (var i:uint = 0; i < labels.length; i++) { var label:FrameLabel = labels[i]; trace("frame " + label.frame + ": " + label.name); } voltar_btn.visible = false; addEventListener(Event.ENTER_FRAME, botaoVisivel,false, 0, true); //stage.addEventListener(Event.ENTER_FRAME, botaoVisivel,false, 0, true); function botaoVisivel(e:Event):void { if (currentFrame != 1) { voltar_btn.visible = true; } if (currentLabel == "quinto") { avancar_btn.visible = false; } if (currentLabel < "quinto") { avancar_btn.visible = true; } trace(currentFrame); } avancar_btn.addEventListener(MouseEvent.CLICK, avancaSlide); function avancaSlide(e:MouseEvent):void { nextFrame(); } voltar_btn.addEventListener(MouseEvent.CLICK, voltaSlide); function voltaSlide(e:MouseEvent):void { prevFrame(); trace(currentLabel); } //trace(currentFrame); trace(currentLabel); A única coisa que eu reparei é que no trace do Enter Frame no output aparece o número do frame diversas vezes, será que tem algum erro? É necessário sempre utilizar removeEventListener para liberar memória ou algo assim? Compartilhar este post Link para o post Compartilhar em outros sites