Ir para conteúdo

POWERED BY:

Arquivado

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

P3rukao

Efeito no Drop 'depois do' Drag

Recommended Posts

Peoples.... depois de aprender como usar o drag and drop e o hitTest(), que são bem "facim" de aprender.... [link do post]

eu queria incrementa-los com alguns efeitos mais interessantes.

 

» tipo.... o que eu quero entender agora é como fazer com que quando eu solte o meu objeto(mc), ele, depois de abrir esse meu arquivo, volte para a sua posição inicial..... com, OBRIGATORIAMENTE, o efeito tween... que faz ele ir mais suave...... pq senão fica uma coisa muito tosca, "visualmente falando" <_< !!!

» Eu já vi um tuto que ensinava isso, mas eu acabei perdendo o link, e agora não acho mais de "jeito-maneira-nenhuma" :mellow:

 

-------

 

» um outro efeito legal que eu imaginei, mas não tenho conhecimentos para aplicá-los.... seria, quando o usuario clicar e arrastar o objeto.... o que seja arrastado, não seja necessariamente o meu objeto em sim, e sim um outro objeto da mesma forma(quadrado ou circulo) que o meu outro mc, sendo esse ultimo, apenas uma coisa com bordas pontilhadas ou até mesmo o objeto antigo mas com um alpha bem fraquinho....

 

» Lembrando que o meu objeto inicial, o que eu iria "supostamente" arrastar, deve ficar imóvel!!!

 

----

• Alguem sabe da existencia desse post, ou tem alguma dica legal de como fazer isso ????

 

" Esse tipo de dúvida eu tenho a todo instante, mas nem sempre estou capacitado para 'destrinchá-las' !!! "

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma classe de exemplo. Ela é um pouquinho mais complexa de que um simples exemplo, pois assim você conseguirá (re)usá-la em vários projetos e diversas vezes dentro de um mesmo projeto.

 

Para poder utiliza-la, você precisará:

 

- Estar usando ActionScript 3;

- Baixar a Tweener, que ajuda um monte para realizar "Tweens" de forma prática e rápida;

 

Crie uma estrutura de pastas que reflita o pacote da classe abaixo, por exemplo, você está trabalhando dentro de uma pasta de nome "teste", dentro dela, crie a arvore de pastas "teste/br/com/hufersil/effects". Lembre-se que nosso fla ficará dentro da pasta "teste".

 

Copie o codigo e salve o arquivo com o nome de "FakeDrag.as" dentro da pasta "br/com/hufersil/effetcs"

 

package br.com.hufersil.effects
{
	
	import caurina.transitions.Tweener;
	
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	
	/**
	 * Classe para dar um "fake drag", ou seja, copia o elemento que será
	 * arrastado em tempo de execução e faz um tween ao termino do drag,
	 * movendo o objeto original ao ponto de destino de uma maneira mais
	 * suave
	 * @author Hugo Silva
	 * @link http://www.hufersil.com.br
	 * 
	 */
	public class FakeDrag
	{
		// objeto original
		private static var target:DisplayObject;
		// objeto copiado
		private static var copy:MovieClip;
		
		/**
		 * Construtor não será usado
		 * como é uma classe estatica, geramos uma 
		 * exceção para que NUNCA esta classe seje 
		 * instanciada
		 * @author Hugo Silva
		 * @link http://www.hufersil.com.br
		 * 
		 */
		public function FakeDrag()
		{
			throw new ArgumentError('Classe estatica');
		}
		
		/**
		 * Inicia o drag do elemento desejado
		 * 
		 * @param DisplayObject Objeto que será copiado e posteriomente arrastado
		 * @author Hugo Silva 
		 * @link http://www.hufersil.com.br
		 */
		public static function start(target:DisplayObject):void {
			
			FakeDrag.target = target;
			
			var bmpd:BitmapData = new BitmapData(target.width, target.height, true);
			bmpd.draw(target, null, null, null, null, true);
			
			var bmp:Bitmap = new Bitmap(bmpd,'auto',true);
			copy = new MovieClip();
			copy.addChild( bmp );
			
			copy.x = target.x;
			copy.y = target.y
			copy.alpha = .5;				
			
			target.parent.addChild( copy );
			copy.startDrag();
		}
		
		/**
		 * Pára o drag e anima o objeto original
		 * 
		 * @author Hugo Silva 
		 * @link http://www.hufersil.com.br
		 *
		 */
		public static function stop():void {
			Tweener.addTween(target, {
				time: 1,
				x: copy.x,
				y: copy.y
			});
			
			copy.parent.removeChild(copy);
		}
			

	}
}

Descompacte a Tweener dentro da pasta "teste". Deverá ficar como "teste/caurina/transitions";

 

Para testarmos a classe, crie um novo arquivo FLA, grave dentro da pasta "teste" com qualquer nome.

No primeiro quadro, coloque as ações abaixo:

 

import br.com.hufersil.effects.*;

// desenhamos um MovieClip dinamicamente
var teste:MovieClip = new MovieClip();
with(teste.graphics){
	beginFill(0xFFCC00, 1);
	drawRect(0,0,300,150);
	endFill();
}

// colocamos o movieclip desenhado no palco
addChild(teste);


///////////////////////////////////////////////////////
// AQUI O QUE REALMENTE INTERESSA
// Atribuimos ao movieclip criado um evento de mouse
// de mouse down. neste momento, iniciamos o metodo
// estatico "start" da classe "FakeDrag".
// Ele fara todas as inicializações necessarias
//
// Ao mesmo tempo que fazemos esta incializacao,
// cadastramos um ouvinte (EventListener) ao stage,
// porque queremos que, onde quer que o usuario "solte"
// o botão do mouse (MOUSE_UP), ele pare com o drag
// e inicie a animação da janela real.
///////////////////////////////////////////////////////
teste.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);

function start_drag(e:MouseEvent):void {
	FakeDrag.start(e.target.parent as DisplayObject);
	stage.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
}

function stop_drag(e:MouseEvent):void {
	FakeDrag.stop();
	stage.removeEventListener(MouseEvent.MOUSE_UP, stop_drag);
}

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo, eu olhei e testei o seu código aqui em casa, e está funcionando direitinho... era exatamente esse efeito que eu estava tentando fazer, OBRIGADO!!!

 

Mas ainda resta mais um detalhe:

 

Na minha aplicação, eu teria que passar algumas informações (attributos) de cada "mc" que eu solte numa área de "hit", vindas de um XML, para serem exibidas nessa área, ou num "emptyMC".... por isso, o objeto de minha lista não deverá "IR" até a área onde haja o ".MOUSE_UP" do objeto, e sim retornar a posição inicial, caso solte-o em um local fora da área de "hit"...

 

 

::: PORTANTO :::

» Como que eu poderia fazer para utilizar o efeito de seu código, com o hitTest(), ou seja, ele só iria fazer aquele movimento para a posição do ".MOUSE_UP" se estivesse em "hit" com uma determinada área.... e se soltasse num espaço sem o "hit", ele voltaria para a posição inicial ???

 

» Posteriormente teria que ter uma ação para que quando eu trocasse de objeto, ou seja, quando eu escolhesse outro "mc" para soltar na área de "hit", o que já estava lá, volte para a sua posição inicial...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Intao apesar da boa explicacao tive algumas duvidas

se puder explicar melhor

por que assimm

baxei la a classe caurina certo veio os seguintes arquivos descompactados dentro da pasta caurina/transitions:

AuxFunctions.as

Equations.as

PropertyInfoObj.as

SpecialProperty.as

SpecialPropertyModifier.as

SpecialPropertySplitter.as

Tweener.as

TweenListObj.as

 

e ainda dentro veio otra pasta "properties" com:

ColorShortcuts.as

CurveModifiers.as

DisplayShortcuts.as

FilterShortcuts.as

SoundShortcuts.as

TextShortcuts.as

 

E ae que que eu faco coloquei dentro da pasta:

C:\Arquivos de programas\Adobe\Adobe Flash CS3\en\First Run\Classes\

ta certo ?!

e agora q q eu faco ?!

 

disculpa a burrice ae ;)

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra naum precisa disso naum....

 

é só criar os sub-diretórios "br/com/hufersil/effetcs" dentro do diretorio de sua aplicação.......

 

e fazer o resto:

 

Descompacte a Tweener dentro da pasta "teste". Deverá ficar como "teste/caurina/transitions";

 

Para testarmos a classe, crie um novo arquivo FLA, grave dentro da pasta "teste" com qualquer nome.

eu fiz isso e funcionou certinho aqui..... eu só naum estou entendendo como usar toda essa classe da maneira que eu preciso!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais tpw a partir de que diretorio ele comeca a conta

tpw c:/arquivos de programas/adobe/flash/en/first run/classes.... apartir daqui ?! dae no caso ficaria assim:

package caurina.transitions

 

pq coloquei as coisas la

C:\Arquivos de programas\Adobe\Adobe Flash CS3\en\First Run\Classes\caurina\transitions

esse e o diretorio q tao todas as "AS" da classe ta certo no caso entao ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

naaaum kra...... esses arquivos você vai extrair no diretorio que estão os SEUS arquivos (.fla) que você está desenvolvendo....

 

tipo: você tem uma pasta chamada "xShacka" com um arquivo .fla, daí dentro dessa pasta, você cria as outras e extrai os arquivos..... sacou http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.