Ir para conteúdo

POWERED BY:

Arquivado

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

RonaldinhoShowman

Banner Dinâmico com Botões de Efeito Avançar/Retroceder em ActionScrip

Recommended Posts

Olá Pessoal!!!

Gostaria de tirar algumas dúvidas em relação a um projeto que estou desenvolvendo em Flash, utilizando ActionScript2.

Antes de tudo, gostaria de dizer que sou novo no fórum e tenho um conhecimento mediano em adobe flash. Por isso me desculpem se o tópico estiver muito extenso ou se as minhas actions de uma certa forma, não sejam as mais adequadas para meu projeto.

Trata-se de um banner de produtos, onde tenho 5 produtos, juntamente com 5 botôes (movieclips).

Quando clicado, os botões executam um "play" na timeline e param no frame correspondente ao botão clicado, avançando ou retrocedendo conforme o frame atual. Cada produto está utilizando um intervalo de 15 frames que é referente a animação de transição entre eles.

Em cada frame que marca o final da transição, inseri um "posClip" que determina o avanço dos frames. Segue a action dos botões que, por sinal, funciona perfeitamente (ban1,2,3,4,5 corresponde as instâncias dos movieclips que funcionam como botão)

 

ban1.onRelease = function(){

onEnterFrame = function(){

if (_currentframe>=1) {

prevFrame();

}

}

}

//--------------------------------------------------------------//

ban2.onRelease = function(){

onEnterFrame = function(){

if (_currentframe>=16) {

prevFrame();

}

else {

play();

}

}

}

//---------------------------------------------------------------------------//

ban3.onRelease = function(){

onEnterFrame = function(){

if (_currentframe>=31) {

prevFrame();

}

else {

play();

}

}

}

//---------------------------------------------------------------------------//

ban4.onRelease = function(){

onEnterFrame = function(){

if (_currentframe>=46) {

prevFrame();

}

else {

play();

}

}

}

//---------------------------------------------------------------------------//

ban5.onRelease = function(){

onEnterFrame = function(){

if (_currentframe>=61) {

prevFrame();

}

else {

play();

}

}

}

 

Até ai tudo bem. Por se tratar de um banner dinâmico, houve a necessidade de fazer com que o mesmo mostrasse cada produto, passando primeiramente pela transição e por fim, parando no frame que marca o final da transição por 8 segundos, para posteriormente avançar para o próximo produto, numa espécie de "loop" até o último produto, quando no último, após os 8 segundos, ocorre uma animação simulando um efeito de rebobinar e assim iniciar novamente todo o ciclo. Para isso, criei 3 funções em cada frame que marca o final da transição, conforme abaixo:

 

pausar = function(){

stop();

}

iniciar = function(){

play();

}

controlar = function(){

if(_currentframe == 1){

pausar();

var intervalo = setTimeout(iniciar, 8000);

}

}

 

onde "_currentframe == 1" indica o frame que marca o final da transição. Para cada frame esse valor obviamente é diferente.

Em cada frame que marca o final da transição chamei a função "controlar", que é responsável pela animação automãtica do banner conforme abaixo:

 

controlar();

 

Tudo perfeitamente funcionando de acordo até aqui... agora vem o meu problema:

Quando clico nos botões, os mesmos executam o comando para avançar ou retroceder, porém, ficam parados no frame atual e não executam mais a animação automática após os 8 segundos...

Sei que o setTimeout executa a função uma única vez, o mais apropriado seria o setInterval/clearInterval...

Porém não há meios para que o banner funcione corretamente com o setInterval... já tentei de todas as formas e isso não foi possível... mesmo com o clearInterval, o tempo do intervalo nunca é reiniciado, fazendo com que o banner fique com intervalos desregulados...

 

Dúvida: Há alguma forma de, ao clicar nos botões, esse "setTimeout" seja executado novamente??? Há alguma forma alternativa (em ActionScript2) de se fazer esse mesmo procedimento que eu preciso???

 

Se necessário posso enviar o .fla para análise.

Agradeceria muito se alguém pudesse me ajudar a solucionar... já faz algumas semanas que estou tentando e não consigo uma solução... já li vários tutoriais, informações, tópicos de fórums... e nada até o momento.

Aguardo resposta...

Abraço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é as2, você pode criar um intervalo _global e seguir a regra de antes de iniciar um intervalo, sempre parar o intervalo anterior, e depois de executado tambem deve parar, ficando mais ou menos assim:

 

// na chamada 
{
  clearInterval(_global.idIntervalo);
  _global.idIntervalo = setInterval(function(){
                                               trace("la la la");
                                               clearInterval(_global.idIntervalo);
                                              }, 2000);
}

 

No caso acima ele vai parar de executar o intervalo apos os 2 segundos, se preferir retire o clear de dentro do function, mas sempre use um clear antes de chamar, mesmo que não tiver nada em execussão, ele não vai atrapalhar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carneirinho, obrigado pela ajuda...

Mas não entendi, onde crio esse intervalo _global??? Substituo ou acrescento em algum lugar do meu action???

E o "trace", é necessário colocá-lo?

Lembrando que o setInterval não havia funcionado antes... e além disso, eu só preciso que a animação automática do banner continue sendo executada ao clicar nos botões, uma vez que a animação para... pois de resto ele já está funcionando perfeitamente...

se puder me explique melhor, minhas actions estão todas na timeline... para visualizar melhor o funcionamento, acesse: Clique aqui

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código de avançar ou retroceder entra no lugar do trace, o resto funciona como já está explicado, esse _global é para você conseguir parar o intervalo de qquer botão, você setando para _global como no exemplo, ele se tornará acessível de qquer parte do flash.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Carneirinho...

Me desculpa por novamente questionar o action, mas infelizmente não funcionou da maneira que você me passou....

Deixa eu te explicar melhor: o action que eu preciso que continue sendo executado ao clicar nos botões é esse que está em destaque abaixo:

 

pausar = function(){

stop();

}

iniciar = function(){

play();

}

controlar = function(){

if(_currentframe == 1){

pausar();

var intervalo = setTimeout(iniciar, 8000);

}

}

 

(Essa função em destaque é que faz o banner rodar automaticamente, porém ela depende das anteriores. Chamo essa função com o comando "controlar();" em cada frame que marca o final da transição de cada produto, alterando o comando "_currentframe" de acordo com o frame especificado. Portanto essa é a função que deve continuar funcionando apos clicar nos botões)

 

Se possível dá uma luz por favor e me desculpe mais uma vez, mas isso tá me deixando louco rs...

Muito obrigado desde já!!!

 

... continuando o post anterior, pois esqueci de mencionar mais um deltalhe...

 

Tipo, quando clico em um botão, por exemplo, "botão 1", o banner retrocede frame a frame ao "produto 1" que está no frame 1, indepentdente do frame atual.

Neste mesmo frame (1), tenho a função em destaque no post anterior, e a sua chamada.

O problema é: ao clicar no botão 1, ocorre o retrocesso, mas a função em destaque não é executada novamente. Preciso que ela seja executada sempre, automaticamente e também quando clicar no botão 1...

Se eu não clico em nenhum dos botões, a função funciona, ao contrário ela para.

Me ajudem por favor...

Obrigado!!!

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.