gfm100 0 Denunciar post Postado Outubro 3, 2008 oi pessoal... estou com um probleminha :wacko: ... preciso fazer um MC gigante na largura e que apareça só um parte dele, até aí tudo bem, mas o resto que não aparece eu preciso deixar como num documento pdf, a mãozinha, quando clicar e arrastar ele traz o resto, porém horizontalmente... com o startDrag e o stopDrag é simples e fácil, porém preciso que esse efeito fique como no iPhone: se você clicar e arrastar e soltar enquanto arrasta, ele pega aceleração e começa a diminuir aos poucos... é possível fazer isso com startDrag e stopDrag ?? :blink: se não for, como eu posso fazer isso ?? :blink: agradeço muito por qualquer resposta ! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif se precisar posso explicar novamente de outra forma se alguém não entendeu, mas creio que qualquer um que conheça o iPhone sabe do que estou falando http://forum.imasters.com.br/public/style_emoticons/default/grin.gif -===============================================- EDIT: finalizado: http://img515.imageshack.us/my.php?image=sitext4.swf Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 5, 2008 Vamos lá: Tirando a parte de esconder o mc com uma máscara, pense no seguinte código: mc.arrasta = false; mc.dx = 0; mc.oldx = this._x; mc.vx = 0; mc.ax = .9; mc.onPress = function(){ this.arrasta = true; this.dx = this._x - _root._xmouse; } mc.onRelease = mc.onReleaseOutside = function(){ this.arrasta = false; } mc.onEnterFrame = function(){ if(this.arrasta){ this._x = this.dx + _root._xmouse; this.vx = this._x - this.oldx; this.oldx = this._x; }else{ if(!(this.vx > -.1 && this.vx < .1)){ this.vx *= this.ax; this._x += this.vx; } } } Primeiro eu defino as variáveis que o mc vai precisar para esse movimento, aí defino no onEnterFrame o que ele vai calcular. Enquanto o mc está sendo arrastado, ele calcula a velocidade atual de "arrasto". E enquanto o mc não está sendo arrastado, ele verifica se a velocidade é um pouco maior do que praticamente zero e aplica a desaceleração no movimento do mc. Deu pra pegar a idéia? Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 6, 2008 Antoniosp sua função é excelente ! o problema é que não consigo deixa-la junto com o hand cursor, se eu mudo o cursor pra "mãozinha" a função não funciona e eu preciso dos 2 juntos... mais uma coisa, tem como colocar limites pro MC não sumir do palco, mas que ele não pare bruscamente, só desacelere até alcançar o limite ??? espero não estar abusando http://forum.imasters.com.br/public/style_emoticons/default/blush.gif muito obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 6, 2008 Antoniosp sua função é excelente ! o problema é que não consigo deixa-la junto com o hand cursor, se eu mudo o cursor pra "mãozinha" a função não funciona e eu preciso dos 2 juntos... mais uma coisa, tem como colocar limites pro MC não sumir do palco, mas que ele não pare bruscamente, só desacelere até alcançar o limite ??? espero não estar abusando http://forum.imasters.com.br/public/style_emoticons/default/blush.gif muito obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif acabei de resolver o problema com a "mãozinha": coloquei um listener no mouse e funcionou os 2 juntos http://forum.imasters.com.br/public/style_emoticons/default/grin.gif ... só preciso que você me ajude com os limites do palco http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Crespo 0 Denunciar post Postado Outubro 6, 2008 Opa! também estou precisando disso, de nao deixar sair do stage =) Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 6, 2008 Bom.. para fazer a parada brusca é só colocar mais coisas dentro do segundo if, restringindo o movimento ao stage, tipo: mc.arrasta = false; mc.dx = 0; mc.oldx = mc._x; mc.vx = 0; mc.ax = .9; //Limites mc.lim_esq = 0; mc.lim_dir = Stage.width; mc.onPress = function() { this.arrasta = true; this.dx = this._x - _root._xmouse; }; mc.onRelease = mc.onReleaseOutside = function () { this.arrasta = false; }; mc.onEnterFrame = function() { //Calcula a velocidade enquanto arrasta if (this.arrasta) { this._x = this.dx + _root._xmouse; this.vx = this._x - this.oldx; this.oldx = this._x; //Se não arrasta, move de acordo com a vel } else { if (!(this.vx > -.1 && this.vx < .1)) { this.vx *= this.ax; this.oldx = this._x += this.vx; } //Verificando os limites direito e esquerdo if (this._x < -this._width + this.lim_dir) { this._x = -this._width + this.lim_dir; this.vx = 0; } else if (this._x > this.lim_esq) { this._x = this.lim_esq; this.vx = 0; } } }; Dei uma mudada no código para acrescentar as restrições. Que acha desse jeito? Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Crespo 0 Denunciar post Postado Outubro 7, 2008 Antoniosp, aqui seu codigo nao funcionou... Mas eu entendi o que quis dizer, dei uma ajustada e consegui o que eu queria =) obrigado! mc.arrasta = false; mc.dx = 0; mc.oldx = mc._x; mc.vx = 0; mc.ax = .9; //Limites mc.lim_esq = 0; mc.lim_dir = Stage.width - mc._width; mc.onPress = function() { this.arrasta = true; this.dx = this._x - _root._xmouse; }; mc.onRelease = mc.onReleaseOutside = function () { this.arrasta = false; }; mc.onEnterFrame = function() { //Calcula a velocidade enquanto arrasta if (this.arrasta) { this._x = this.dx + _root._xmouse; this.vx = this._x - this.oldx; this.oldx = this._x; //Se não arrasta, move de acordo com a vel } else { if (!(this.vx > -.1 && this.vx < .1)) { this.vx *= this.ax; this.oldx = this._x += this.vx; } //Verificando os limites direito e esquerdo if (this._x < this.lim_esq) { this._x = this.lim_esq; this.vx = 0; } else if (this._x > this.lim_dir) { this._x = this.lim_dir; this.vx = 0; } } }; Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 7, 2008 Antoniosp aqui seu código funcionou sim http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif , mas o objeto continua sendo arrastado pra fora, se por um acaso soltar o objeto com parte dele fora do limite ele o coloca de volta, mas o que eu queria era que ele não deixasse arrastar além do limite... http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif outra coisa, nenhum botão que eu coloco dentro do movieclip que arrasto funciona, tem como corrigir isso ou é um limite dessa função ? já a função que o Rafael Crespo colocou com um complemento fez com que meu MC ficasse "quicando" de um limite pro outro :huh: olha só como está até agora com a função do Antoniosp: http://img204.imageshack.us/my.php?image=siteds4.swf -===========- peço aos moderadores pra retirar o marcador de [RESOLVIDO], pois ainda estamos discutindo e quanto mais pessoas ajudarem melhor, a maioria ao ler a tag "resolvido" não entra no tópico pra ajudar. espero que compreendam ! http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 8, 2008 Pô gmf100, tava fácil de resolver esse problema, hein? Era só colocar o "bloco verificador de limites" fora do else do arrasta: mc.arrasta = false; mc.dx = 0; mc.oldx = mc._x; mc.vx = 0; mc.ax = .9; //Limites mc.lim_esq = 0; mc.lim_dir = Stage.width; mc.onPress = function() { this.arrasta = true; this.dx = this._x - _root._xmouse; }; mc.onRelease = mc.onReleaseOutside = function () { this.arrasta = false; }; mc.onEnterFrame = function() { //Calcula a velocidade enquanto arrasta if (this.arrasta) { this._x = this.dx + _root._xmouse; this.vx = this._x - this.oldx; this.oldx = this._x; //Se não arrasta, move de acordo com a vel } else if (!(this.vx > -.1 && this.vx < .1)) { this.vx *= this.ax; this.oldx = this._x += this.vx; } //Verificando os limites direito e esquerdo if (this._x < -this._width + this.lim_dir) { this._x = -this._width + this.lim_dir; this.vx = 0; } else if (this._x > this.lim_esq) { this._x = this.lim_esq; this.vx = 0; } }; Vamos lá galera, eu sei que pegar código de mão beijada é maravilha, mas também temos que adaptar e criar nosso próprio! Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 8, 2008 desculpa Antoniosp, mas AS não é minha área... :o eu entendo um pouco e realmente tentei mudar sua função pra chegar onde eu queria, mas não consegui... :( e ainda estou tentando fazer com que botões funcionem dentro desse MC ou fazer com que fiquem fora e sigam o MC que é arrastado, de forma que continuem funcionando... agradeço muito a sua ajuda, a última função que você colocou ficou perfeita http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 9, 2008 Bão, sobre os mcs que não funcionam dentro desse aí o problema é o seguinte: Como há um onPress e um onRelease (ou seja, eventos) definidos nesse mc de fora, o flash "fica atento" apenas a esse mc como um todo, e não verifica os eventos dos mcs que estão dentro. Para resolver isso só há um jeito: chamar as funções de outro modo. Esse outro modo pode ser, por exemplo, colocar um mc transparente dentro desse principal aí e que fique por trás dos outros mcs internos. Então você aplica essas funções a esse mc transparente e modifica todos os this. para this._parent. (ou seja, o pai do mc transparente -> o mc principal). Ficou claro? :) Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 9, 2008 :blink: nunca teria pensado nisso... http://forum.imasters.com.br/public/style_emoticons/default/cry.gif resolução simples bem simples e funcional... vou testar aqui e volto para postar o resultado... até logo ! http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
gfm100 0 Denunciar post Postado Outubro 9, 2008 não poderia ficar melhor ! ! ! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif eu coloquei o this._parent. apenas onde seriam utilizados valores referentes ao objeto a ser movido ("tudo"), deixando as variáveis atribuídas ao MC invisível... ficou desse jeito: mc.arrasta = false; mc.dx = 0; mc.oldx = mc._parent._x; mc.vx = 0; mc.ax = .9; //Limites mc.lim_esq = 0; mc.lim_dir = Stage.width; mc.onPress = function() { this.arrasta = true; this.dx = this._parent._x - _root._xmouse; }; mc.onRelease = mc.onReleaseOutside = function () { this.arrasta = false; }; mc.onEnterFrame = function() { //Calcula a velocidade enquanto arrasta if (this.arrasta) { this._parent._x = this.dx + _root._xmouse; this.vx = this._parent._x - this.oldx; this.oldx = this._parent._x; //Se não arrasta, move de acordo com a vel } else if (!(this.vx > -.1 && this.vx < .1)) { this.vx *= this.ax; this.oldx = this._parent._x += this.vx; } //Verificando os limites direito e esquerdo if (this._parent._x < -this._parent._width + this.lim_dir) { this._parent._x = -this._parent._width + this.lim_dir; this.vx = 0; } else if (this._parent._x > this.lim_esq) { this._parent._x = this.lim_esq; this.vx = 0; } }; acho que agora o tópico pode ser considerado como resolvido http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif muito obrigado pela ajuda e desculpa qualquer perda de tempo http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif -======================- final: http://img515.imageshack.us/my.php?image=sitext4.swf Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Outubro 9, 2008 Beleza, ficou ótimo! Tópico referência para menus desse tipo, hein? Valeu Compartilhar este post Link para o post Compartilhar em outros sites