Ir para conteúdo

POWERED BY:

Arquivado

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

istarlin

Simulacao

Recommended Posts

Olá,

 

Estou com um pequeno problema que venho tentando resolver a um tempo mas n consigo. Resolvi apostar nos fóruns para conseguir uma ajuda.

 

Deem uma olhada nesse site e escolham um projeto para visualizar:

 

http://www.cultivatorads.com/

 

Percebam q voce pode navegar arrastando as imagens, com um efeito suave de tween (o que nesse caso eu acredito que seja apenas uma atualizacao da posicao do movieclip, pois desconheco pelo menos ate agora uma forma de inserir tween numa acao de drag).

 

Tentei bolar mil formas para que meu efeito se igualasse a esse mas os problemas são:

 

- Percebam que ao comecar a arrastar, o ponto que o usuario clicou fica fixo, a imagem comeca a se mover a partir dali.

- Ao soltar, o movimento e muito suave e acompanha o mouse. voce pode inclusive "lançar" a imagem para um dos lados e obter um efeito suave. Cheguei a conseguir construir uma acao em que ao soltar ele largava com um tween, mas as vezes ele travava no mouse e voltava a posicao inicial.

 

Caso alguém saiba algo a respeito, por favor me dá uma luz ;)

 

o>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, montei um esboço aqui:

 

clip.onPress = function() {	this.ox = this._x;	this.oy = this._y;	comecaDrag(this);};clip.onRelease = clip.onReleaseOutside = function () {	this.ox_final = _root._xmouse;	this.oy_final = _root._ymouse;	terminaDrag(this);};function comecaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += (_root._xmouse - mc.ox) / 8;		mc.oy += (_root._ymouse - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}function terminaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += (mc.ox_final - mc.ox) / 8;		mc.oy += (mc.oy_final - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}

Ao clicar em um clip, guardamos suas posições atuais e chamamos o comecaDrag(). Quando soltarmos, as posições gravadas são a do próprio mouse. As funções aplicam uma fórmula de easing básica, que consiste em: pos_atual += (pos_final - pos_atual)/easing Quanto maior o easing, mais lenta a animação.

 

Já dá pra brincar com isso. :P

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, montei um esboço aqui:

clip.onPress = function() {	this.ox = this._x;	this.oy = this._y;	comecaDrag(this);};clip.onRelease = clip.onReleaseOutside = function () {	this.ox_final = _root._xmouse;	this.oy_final = _root._ymouse;	terminaDrag(this);};function comecaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += (_root._xmouse - mc.ox) / 8;		mc.oy += (_root._ymouse - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}function terminaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += (mc.ox_final - mc.ox) / 8;		mc.oy += (mc.oy_final - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}
Ao clicar em um clip, guardamos suas posições atuais e chamamos o comecaDrag(). Quando soltarmos, as posições gravadas são a do próprio mouse. As funções aplicam uma fórmula de easing básica, que consiste em: pos_atual += (pos_final - pos_atual)/easing Quanto maior o easing, mais lenta a animação.Já dá pra brincar com isso. :PAbraço
opa cara,o movimento apos pressionar e ao soltar esta PERFEITO. muito obrigado.mas ainda temos um problema. Ao dar o clique na imagem, o ponto zero do movieclip nao pode se igualar ao do mouse. No site que eu postei se voce reparar, ao comecar a arrastar o ponto zero continua onde esta, apenas e modificado quando eu comeco a arrastar (mas nao se iguala ao ponto do mouse).aí mora o problema o.Omas obrigado pela rapidez o movimento ficou otimo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, se quiser deixar o ponto zero no mesmo lugar, grave onde está e chame depois.

 

clip.onPress = function() {	this.ox = this._x;	this.oy = this._y;	this.difx = _root._xmouse - this._x;	this.dify = _root._ymouse - this._y;	comecaDrag(this);};clip.onRelease = clip.onReleaseOutside = function () {	this.ox_final = _root._xmouse;	this.oy_final = _root._ymouse;	terminaDrag(this);};function comecaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += ((_root._xmouse - this.difx) - mc.ox) / 8;		mc.oy += ((_root._ymouse - this.dify) - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}function terminaDrag(mc) {	mc.onEnterFrame = function() {		mc.ox += ((mc.ox_final - this.difx) - mc.ox) / 8;		mc.oy += ((mc.oy_final - this.dify) - mc.oy) / 8;		mc._x = mc.ox;		mc._y = mc.oy;	};}

Se quiser, dê uma lida nesse tutorial. Ele tem uma simplificação do código, e traz outras funções.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa antonio valeu.desculpe pela demora de responder, mas estava ausente.o seu codigo esta ate melhor do que o do tutorial ( mas o tutorial e mto legal ) o unico lance que falta para ficar 100% no caso do seu codigo, e ele largar o meu mouse |o|Ele tem o easing tanto ao pressionar quanto ao soltar o objeto. Esse é o correto (no tutorial quando eu solto ele para de vez o objeto, sem easing), mas tentei bolar uma logica colocando um if na funcao terminaDrag mas nao funfou.Alguma ideia q possa me ajudar?: )

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, conseguiu funfar agora : )obrigado pela forca!!!!!!!!!!!!!!!!!!!

Dr. fiquei curioso, posta a action ai pro pessoal tentar tbm ?Valeuuu.

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.