Ir para conteúdo

POWERED BY:

Arquivado

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

Guerreirorj

Retroceder animação - AS3

Recommended Posts

Boa noite!

 

Tenho um background que gostaria que movesse de um lado para o outro - através de botões - conforme sua posição em determinado momento.

Por exemplo:

Estando numa posição 1 e clicando no botão 2, o bg avançaria frame a frame até a posição 2;

Estando numa posição 2 e clicando no botão 3, o bg avançaria frame a frame até a posição 3;

Estando numa posição 3 e clicando no botão 1, o bg retrocederia frame a frame até a posição 1;

 

Verifiquei algumas dicas no fórum, mas só em versões anteriores do AS o que não me permitiu boa compreensão.

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Guerreirorj.

 

A princípio sugere o uso de uma função com ENTER_FRAME.

 

Por favor informe as tentativas que já fez, não importa que contenham erros, fica melhor para obter o auxílio.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Elektra!

 

Nesse código abaixo, meu mc (bg) só está avançando nos botões 1 e 2, normalmente com gotoAndPlay, e no botão 3 ele rebobina até o início do mc. Não é isso que desejo. Minha idéia era usar algo do tipo "se o currentFrame < destino, AVANÇE até o destino; senão se o currentFrame > destino, RETROCEDA até o destino". Destino seria, portanto, um ponto na animação do mc que seria chamado pelos botões. O background iria para a direita ou para a esquerda conforme o botão acionado e também pela sua posição atual. Mais ou menos como olhar para os lados, frame por frame.

EStou estudando o prevFrame, mas não sei se vai me atender, pois parece que ele volta tudo e não somente para um ponto determinado. Ufff...rs

Muito obrigado.

 

bg.stop();

	bot1.addEventListener(MouseEvent.CLICK, cena1);
	bot2.addEventListener(MouseEvent.CLICK, cena2); 
	bot3.addEventListener(MouseEvent.CLICK, saiu);
	
	function cena1(e:MouseEvent):void{     
		bg.gotoAndPlay(2);        
	}
	function cena2(e:MouseEvent):void{     
		bg.gotoAndPlay(16);        
	}
			
	function saiu(e:MouseEvent):void{   
		bg.addEventListener(Event.ENTER_FRAME, volta);     
	}                                                        
				
	function volta(e:Event):void{         
		bg.prevFrame();                
			if(bg.currentFrame==1){         
				bg.removeEventListener(Event.ENTER_FRAME, volta);       
			}                        
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tu fizer

 

mc.prevFrame() ele só vai voltar 1 frame

 

Se tu colocar ele dentro do ENTER_FRAME ele vai voltar até o frame 1

Ai você tem que fazer isso que você já fez mesmo bg.currentframe == 1

 

Veja o exemplo:

stop();
this.addEventListener(Event.ENTER_FRAME, vai);

function vai(e:Event):void{
	if(this.currentFrame == 50){
		this.removeEventListener(Event.ENTER_FRAME, vai);
		this.addEventListener(Event.ENTER_FRAME, volta);
	}
	trace(this.currentFrame);
	this.nextFrame();
}

function volta(e:Event):void{
	if(this.currentFrame == 1){
		this.removeEventListener(Event.ENTER_FRAME, volta);
		this.addEventListener(Event.ENTER_FRAME, vai);
	}
	trace(this.currentFrame);
	this.prevFrame();
}

Só criar um flash com 51 frames ou 50 clicar sobre o primeiro frame e colar o código...

 

você vai ver que ele vai ficar indo e voltando mostrando os frames que ele ta passando.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar o nextFrame e definir o frame que deseja que a animação pare.

 

Por exemplo, clicou no botão 1 (dir_btn), avança até o frame 30, clicou novamente, avança até o 60, outra vez, avança até o 90.

 

stop();

//EventListeners que vão cuidar os cliques nos botões
dir_btn.addEventListener(MouseEvent.CLICK, proximo);
esq_btn.addEventListener(MouseEvent.CLICK, anterior);

function proximo(me:MouseEvent):void
{
	
	stage.addEventListener(Event.ENTER_FRAME, onFramesNext);
}

function anterior(me:MouseEvent):void
{
	stage.addEventListener(Event.ENTER_FRAME, onFramesPrev);
}

function onFramesNext(e:Event):void
{
	//manda para o próximo frame
	nextFrame();
	
		
	//verifica se o frame atual é o frame 30
	if(currentFrame == 30)
	{
		//se for o frame 30, removemos 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);
	}

Depois é criar uma função semelhante para o caminho de volta (esq_btn).

 

Neste code uso apenas 2 botões, um avança e outro retrocede, em qualquer posição.

 

Para mais botões ou outras funcionalidades terá de adaptar o code.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Berseck!

 

Minha idéia é ir e voltar, parando em frames específicos conforme a posição do mc: se ele estiver avançado, volta para o frame especificado; se estiver avançado... avança.

Vou estudar seu script e tenho certeza que será de grande ajuda. Muito obrigado e abraços.

 

Olá, Elektra!

 

Vou fazer um teste com o script que você me passou e depois te digo. Farei os teste com os 2 botões e depois tentarei com botões de menu. Tenho certeza que dará certo. Muito obrigado e tudo de bom.

 

Olá, Elektra!

 

Não respondi antes pois eu havia feito uma pausa no projeto. Testei seu script e o princípio é este mesmo. Rodou beleza! Preciso apenas fazer as adequações para funcionar com botões de menu: indo ou voltando conforme o item clicado. Quando fizer essas adequações posto aqui. Show de bola! Muito obrigado e tudo de bom.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Elektra!

 

Não respondi antes pois eu havia feito uma pausa no projeto. Testei seu script e o princípio é este mesmo. Rodou beleza! Preciso apenas fazer as adequações para funcionar com botões de menu: indo ou voltando conforme o item clicado. Quando fizer essas adequações posto aqui. Show de bola! Muito obrigado e tudo de bom.

 

 

Obrigada pelo retorno, isso é válido para outros colegas do fórum.

 

Se possível informe um link com o o tipo de menu que deseja, fica melhor para identificar o code adequado.

 

 

Abraços

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.