Ir para conteúdo

POWERED BY:

Arquivado

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

André - Editor

Desafio Actions Script

Recommended Posts

Bom, tenho um desafio pra galera... estou a mais de um mês tentando resolver esse problema e não consegui:

 

 

Vou disponibilizar o .FLA e o .AS para vocês, e o sistema é simples. Veja o código abaixo:

 

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.ColorTransform;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.display.Loader;
	import flash.utils.*;
	import flash.text.TextField;
	
	public class main_timeline extends Sprite
	{
		//Criando Variáveis
		private var cor0:Number;
		private var cor1:Number;
		private var v_mc_anima:Boolean;
		
		public function main_timeline()
		{
			//Setando variáveis
			var v_mc_anima = false
			
			//Declara as variáveis de cor como string:
			var s_cor0:String;
			var s_cor1:String;
			
			//Chamando funções no primeiro frame:
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			
			//Tenta pegar as variáveis do HTML:
			try
			{
				s_cor0 = root.loaderInfo.parameters['color0'].substring(1, 7);
				s_cor1 = root.loaderInfo.parameters['color1'].substring(1, 7);
			}
			catch (e:TypeError) //Se não conseguir pegar, cores padrão
			{
				s_cor0 = "00FF00";
				s_cor1 = "FF0000";
			}
			
			//Trocando as variáveis do HTML para RGB:
			cor0 = (Number)("0x"+s_cor0);
			cor1 = (Number)("0x"+s_cor1);
						
			//Controlando o botão 01:
			bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OVER, bt01_manageMouseOver);
			bt01.bt01_bt.addEventListener(MouseEvent.MOUSE_OUT, bt01_manageMouseOut);
			bt01.bt01_bt.addEventListener(MouseEvent.CLICK, bt01_manageMouseClick);
			bt01.addEventListener(Event.ENTER_FRAME, bt01_manageEnterFrame);
		}
						
		//OUTRAS FUNÇÕES:	
	
		//Função para Rollover do botão 01:
		private function bt01_manageMouseOver(e:MouseEvent)
		{
			  bt01.gotoAndPlay (2);
			v_mc_anima = true;
			trace(bt01.bt01_txt01.x);
		}
		
 		private function bt01_manageMouseOut(e:MouseEvent)
		{
			bt01.gotoAndPlay (12);
		}
		
		private function bt01_manageMouseClick(e:MouseEvent)
		{
			var url:String = "home.php";
			var request:URLRequest = new URLRequest(url);
			try {
				navigateToURL(request, '_self');
			}
			catch (e:Error) {
				trace("Ocorreu um erro!");
			}
		}
		
		private function bt01_manageEnterFrame(e:Event)
		{
			trace(bt01.bt01_txt01.y);
			if (bt01.currentFrame == 11) bt01.stop();
			if (bt01.currentFrame == 21) bt01.stop();
		}
				
		//Fução primeiro frame:
		private function onEnterFrame(event:Event)
		{
			if (v_mc_anima == false) {
				bt01.stop();
			}
			
			var trans:ColorTransform = new ColorTransform;
							
/*			//Troca de cores dos botões:	
			trans.color = cor0;
			bt01.bt01_txt02.transform.colorTransform = trans;
						
			trans.color = cor1;
			bt01.bt01_txt01.transform.colorTransform = trans;*/

			removeEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
	}
}

 

Perceba que há uma parte comentada, que realiza a troca de cores dos dois textos que estão no palco. Esses textos possuem uma animação simples de troca de posição entre eles. Agora testem a animação SEM a função de trocar de cor (deixe ela em comentado e de ctrl+enter) depois, retirem o comentário e testem novamente. O que será percebido é que se você deixar a função de trocar de cores, a animação simplesmente NÃO ACONTECE. o botão fica parado! Pelo trace você pode ver que antes, com a troca de cores em comentário, a posição y do texto um (na qual dei trace) muda perfeitamente, e já com a troca de cores, ela fica estática.

 

/*			//Troca de cores dos botões:	
			trans.color = cor0;
			bt01.bt01_txt02.transform.colorTransform = trans;
						
			trans.color = cor1;
			bt01.bt01_txt01.transform.colorTransform = trans;*/

O desafio é fazer esta animação ocorrer SEM SER PELO AS, não vale animar via AS. Quero uma explicação lógica para isto que pra mim se torna um grande BUG do flash, pois não há explicação para isto ocorrer.

 

 

Aguardo respostas ao tópico, abraços e obrigado desde já.

 

André Rodrigues

 

OS ARQUIVOS:

 

http://www.4shared.com/file/98320243/7fefb...o_flash_AS.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

está provocando loop infinito com essas chamadas ao OnEnterFrame

 

 

o que deseja fazer é simples, não precisa "dar tanta volta"

 

apenas crie as ações para um movie principal, e dentro dele crie as animações.

 

exemplo simples

 

 

crie um novo projeto no flash, usando AS 2

nomeie o layer como "actions"

no primeiro frame, pressione F9 para abrir o painel Action Script

Imagem Postada

 

Painel Action Script

 

Imagem Postada

code:

 

obj = _root.MC_BTN;
 
	 obj.onRollOver = function ()
	 {
		 obj.gotoAndPlay( 11 );
	 };
	 
	 obj.onRollOut = function ()
	 {
		 obj.gotoAndPlay( 2 );
	 };

 

feche o painel Action Script e crie um objeto no palco

vamos usar um simples texto

 

Imagem Postada

 

Imagem Postada

após digitar o texto, mantenha o foco no objeto e pressione F8 para definir um nome

 

 

Imagem Postada

 

digite "MC_BTN" (sem as aspas)

Imagem Postada

 

clique OK ou pressione ENTER

 

defina o nome de instância para o objeto:

digite "MC_BTN" (sem as aspas)

Imagem Postada

 

 

dê duplo clique sobre o objeto para entrar dentro do palco do mesmo

 

o screen abaixo está simplicado, pois não é necessário detalhar as partes de dentro

Imagem Postada

 

Layer Actions

frames 1, 10 e 21, adicione o AS

stop();

Layer Mask

desenhe um objeto preenchido para delimitar a área que deseja que seja visível

modifique o layer para o tipo "Mask"

 

 

Layer ask-area

faça como o "Layer Mask", porém, defina transparência 0%

arraste-o para o nível dentro do Layer Mask

 

 

Layer animation

do frame 2 ao frame 11, faça o movimento do objeto como quiser

do frame 12 ao frame 21, faça o movimento do objeto como quiser

arraste-o para o nível dentro do Layer Mask

 

obs: existem 2 layers "animation"

ambos são iguais, porém, para gerar o efeito que pretende, basta copiar o conteúdo criado no passo anterior e invertê-los, para gerar o efeito

btn_action.swf

Compartilhar este post


Link para o post
Compartilhar em outros sites

=D

 

 

cara, primeiramente quero agradecer pela EXCELENTE resposta, muito obrigado mesmo :D Acho que foi a melhor resposta que já recebi num fórum :D Tudo detalhadinho e talz...

 

Só que tem um problema :/

 

Eu uso AS3 só, e TEM que ser em AS3, infelizmente :/

 

No forum oficial da adobe me disseram que o que eu quero realmente não é possivel, que só é possivel dar color transform e movimentar uma mesma imagem se for via AS, que você não pode mesmo animar algo na timeline e mudar a cor dela via AS :/

 

Se mais alguém tiver idéia de como resolver isso, mesmo que através de alguma POG, pode ser.... :D

 

Mesmo assim mais uma vez muito obrigado cara :D

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas em AS3 é exatamente a mesma coisa... só converter os comandos para AS3...

Animar sem AS.. pode ser em AS2... AS1...AS3 é tudo a mesma coisa.

Afinal você vai estar trabalhando com frames... e noções de animação O.o

 

Pegue o código acima explicado e use o AS3 para fazer...

Você vai ver que tem o mesmo efeito.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, consegui entender, só que onde que entrou o color.transform ai?

 

 

Se eu colocar o color.transform desse texto, ele vai mudar de cor E manter a animação?!

 

 

Porque a questão cara, é que aqui a gente trampa com uma ferramenta onde o flash terá que ser todo customizável, o cara vai poder escolher a cor dos objetos do flash sacou?! e essa cor é setada atraves de variaveis no flashvars.

 

Ou seja, ele pega a variavel e da color.transform no texto de acordo com a cor q tiver na variavel. O problema é que quando ele muda o texto, ele perde a animação. Sacou?!

 

 

Será que desse jeito ai vai funcionar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que desse jeito ai vai funcionar?

sim.

 

basta transformar o objeto text em dinamyc text e dar um nome de instância e um nome para "var", para poder interagir com os recursos

 

 

 

nota: ActionScript 3 é a versão mais recente do ActionScript,

entretanto, nem todos os PCs possuem o Flash Player atualizado, por isso não é seguro desenvolver aplicações, voltadas ao público em geral, em AS3

 

Se o aplicativo em questão não utiliza recursos intrínsecos ao ActionScript 3, utilize uma versão abaixo e estável, como o ActionScript 2.

A versão 6 do Flash Player foi difundida há mais de 5 anos, portanto, é suportado por todos os PCs atualmente.

 

Sempre utilize versões abaixo da versão top, para não ter problemas de incompatibilidade. (se o aplicativo for voltado para público em geral)

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.