Jump to content


Photo

Deslizar Mc Nas Posições (x,y)


  • Faça o login para participar
18 replies to this topic

#1 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 19/11/2005, 12:41

Pessoal,

Eu tenho um MC que é um quadrado. Ele se encontra na posição (0,0). Como eu faria para que quando eu clicasse num botão ele fosse para a posição (20,0) por exemplo. Quando clicasse em outro fosse para (40,0) e assim por diante?
Lembrando que eu queria que ele fosse deslizando. Teria como? Algum exemplo?

Obrigado,

#2 pirolll

pirolll

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 21/11/2005, 00:34

...

seguinte...

// variaveis de velocidade de movimento para eixo X e Y
mc.vx = 1;
mc.vy = 1;
// variaveis que definem a posição desejada para o mc
// esta parte voce pode colocar nos botões, para setar o ponto x e y desejado
mc.alvox = 100;
mc.alvoy = 100;
//
// loop geral
onEnterFrame = function () {
     // testa se posição atual x for menor que a posição desejada
     if (mc._x<mc.alvox) {
          // movimenta na direção da posição desejada
          mc._x += mc.vx;
     } else if (mc._x>mc.alvox) {
          // senão, a posição é maior, então diminui a posiacao x do mc
          mc._x -= mc.vx;
     }
     // mesma coisa, mas para eixo y, testa posição atual com posição desejada  
     if (mc._y<mc.alvoy) {
          mc._y += mc.vy;
     } else if (mc._y>mc.alvoy) {
          mc._y -= mc.vy;
     }
};
//fim :D
//agora é só adicionar o action nos botoes setando mc.alvox e mc.alvoy

qqr duvida posta ai :)

#3 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 21/11/2005, 06:32

Aeee...

Valeu meu velho, perfeito!

Brigado!

Edição feita por: O malinha, 21/11/2005, 06:36.


#4 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 21/11/2005, 12:59

Se não for pedir demais....

Oq eu poderia implementar nesse código que foi dado aí emcima para que meu movieclip fosse diminuindo a velocidade gradativamente qndo estivesse indo para o ponto escolhido? Dessa forma aí emcima ele pára bruscamente, eu queria dar uma suavizada, seria possivel?

Valeu mais uma vez!

Edição feita por: O malinha, 21/11/2005, 13:00.


#5 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 21/11/2005, 14:18

import mx.effects.Tween;
import mx.transitions.easing.*;

var oTween:Tween;

function moveObj(alvo:MovieClip, pos:Array):Void{
	oTween = new Tween(alvo, [alvo._x, alvo._y, alvo._xscale, alvo._yscale], pos, 1000);
	
	/* Você pode usar as equações de easing para mudar o movimento do objeto de forma simples e rápida: */
	// Modos de uso:
	// Efeito.easeIn;
	// Efeito.easeOut;
	// Efeito.easeInOut;
	
	// Descomente um para usar. Apenas uma por vez
	//oTween.easingEquation = Back.easeInOut;
	//oTween.easingEquation = Bounce.easeInOut;
	//oTween.easingEquation = Elastic.easeInOut;
	//oTween.easingEquation = Strong.easeInOut;
	
	alvo.onTweenUpdate = function(vals:Array):Void{
  alvo._x = vals[0];
  alvo._y = vals[1];
  alvo._xscale = vals[2];
  alvo._yscale = vals[3];
	}
}

// Botões
bt1_btn.vals = [200, 50, 120, 120];
bt2_btn.vals = [500, 200, 70, 70];
bt3_btn.vals = [20, 400, 100, 100];

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
	moveObj(quad_mc, this.vals);
}
Com a classe Tween fica fácil de criar movimentos, e se tu usar as equações de easing, pode ficar mais interessante ainda.

Abraço
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#6 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 21/11/2005, 15:16

Ótima essa classe. Deu certo.

No ultimo exemplo de Sheepman, mostra que qndo eu clico no bt1_btn o MC quad_mc vai para [200, 50, 120, 120];

Eu tava com a ideia de fazer o seguinte:

Qndo eu clicasse no bt1_btn o quad_mc e o quad_mc2 (um outro MC) fosse para [200, 50, 120, 120].

Entederam?
Um mesmo botão leva dois MCs ao mesmo lugar.

Eu na minha "cabeçudisse" dupliquei o código de quad_mc e colei no quad_mc2 mudando apenas as instancias pra ver se funcionava, e lógico, não funcionou.

Alguem tem alguma idéia?

Valeu

Edição feita por: O malinha, 21/11/2005, 17:02.


#7 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 21/11/2005, 17:57

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
moveObj(quad_mc, this.vals);
moveObj(quad2_mc, this.vals);
}

Basta executar a função no alvo diferente... :)

Abraço
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#8 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 21/11/2005, 18:24

Huum.. estou aprendendo! :D
Bem, e se eu quiser colocar esses dois MC's funcionando independentes um do outro.
Ou seja, qndo eu clicar no botão eu mando o MC1 pra um lugar e o MC2 pra outro.

Na verdade era isso que eu queria perguntar no post anterior e acabei trocando as coisas!

Valeuu!

Edição feita por: O malinha, 21/11/2005, 18:27.


#9 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 21/11/2005, 20:16

Dá pra seguir a mesma linha de pensamento...
// Botões
bt1_btn.vals = [200, 50, 120, 120];
bt1_btn.vals2 = [200, 50, 120, 120];
bt2_btn.vals = [500, 200, 70, 70];
bt2_btn.vals2 = [500, 200, 70, 70];
bt3_btn.vals = [20, 400, 100, 100];
bt3_btn.vals2 = [20, 400, 100, 100];

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
moveObj(quad_mc, this.vals);
moveObj(quad_mc2, this.vals2);
}

Usei os mesmos valores pq estou com preguiça, muda aí depois... :)
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#10 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 23/11/2005, 06:20

Meu aprendizado nessa classe esta sendo muito produtivo. Estou desenvolvendo várias coisinhas, mas tem horas que não sei como fazer algumas coisas.

Por exemplo, como faço para quando clicar no botão o MC ir para o ponto desejado só que redimensionando com o tween?

Como? :blink:

Edição feita por: O malinha, 23/11/2005, 09:44.


#11 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 23/11/2005, 10:54

Bom, vamos ver se consigo clarear suas idéias então malinha! :) hehehe
A classe Tween funciona da seguinte maneira:
// Importamos a classe para o nosso filme
import mx.effects.Tween;
// Importamos os efeitos de easing caso você deseje utilizar algum deles
import mx.transitions.easing.*;
/* Que eu lembre de cabeça agora, existem os seguintes efeitos:
- Bounce
- Back
- Strong
- Elastic
- Regular

Tem mais que isso, com certeza, basta dar uma verificada na pasta lá...
A pasta de classes, caso tu não saiba, fica em:
C:\Arquivo de Programas\Macromedia\Flash 8\en\FirstRun\Classes
No caso da Tween, ela vai estar em Classes\mx\effects\, sacou?
E os efeitos de easing vão estar em Classes\mx\transitions\easing\.

O construtor da classe recebe 4 parâmetros:
- O Alvo
- Os valores Iniciais
- Os valores Finais
- O tempo da transição

var oTween:Tween = new Tween(alvo, valIni, valFin, tempo);

valIni e valFin podem ser uma única propriedade ou um Array com diversas propriedades.

Vamos criar a nossa função que movimenta uma bola no palco.*/

// Declarando Objeto Tween
var oTween:Tween;

function moveObj(alvo:MovieClip, pos:Array):Void{
	// Construindo Objeto Tween
	oTween = new Tween(alvo, // Nosso alvo
        [alvo._x, alvo._y, alvo._xscale, alvo._yscale], // Nossos valores iniciais
        pos, // Nossos valores finais
        1000 // Tempo
        );
	/* Declarado nosso objeto Tween, caso formos utilizar alguma easing equation, devemos defini-la no objeto. */
	oTween.easingEquation = Back.easeInOut;
	/* No caso acima, usamos a classe Back, e o "efeito" easeInOut, que fará com que nossa bola recue no início da transição e no final também. */
	/* Feito isso, o próximo passo é o evento onTweenUpdate, é ele que fará a transição.
	Ele fornece um parâmetro que contém os valores atuais da transição. Como estamos usando Arrays, o parâmetro também será um Array.*/
	alvo.onTweenUpdate = function(vals:Array):Void{
    this._x = vals[0];  // Alterando posição X
    this._y = vals[1];  // Alterando posição Y
    this._xscale = vals[2];	// Alterando escala X
    this._yscale = vals[3];	// Alterando escala Y
	}
	/* E evento onTweenEnd é executado quando a transição é concluída. */
	alvo.onTweenEnd = function(vals:Array):Void{
  this.onTweenUpdate();
	}
}

/* Pronto, a função está feita e pronta para funcionar, basta saber como iremos usá-la... Botões? Pode ser. Apenas lembre que conforme
o caso, a estrutura da função deve mudar. Existem aplicações que você deve remover a Tween a cada ação para evitar bugs, portanto nem
sempre a forma mostrada aqui será a correta. 
Aqui vamos usar botões mesmo.*/
// Valores Botões
// [X, Y, XScale, YScale]
// XScale e YScale alteram o tamanho em escala do MovieClip alvo
bt1_btn.vals = [200, 50, 100, 100];
bt2_btn.vals = [500, 200, 70, 70];
bt3_btn.vals = [20, 400, 100, 100];

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
	if(oTween != undefined) Tween.RemoveTweenAt(oTween.ID);
	moveObj(quad_mc, this.vals);
}
Espero que isso te ajude. Em breve estarei publicando um artigo no FUGPR.com.br falando sobre a classe Tween.

Abraço
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#12 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 23/11/2005, 13:15

Entendi tudo e consegui fazer o movimento redimensionando alterando o valor de XScale.

Valeu pela paciência! [ rsrs ] :D

#13 O malinha

O malinha

    12 Horas

  • Usuários
  • 212 posts
  • Sexo:Não informado

Posted 02/12/2005, 18:46

Aê.. como eu poderia fazer a seguinte coisa:

Eu gostaria de qndo meu mc chegasse ao seu destino ele executasse um loadMovie

eu tenho os meus botões:

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
moveObj(quad_mc, this.vals);
}

Ai eu adicionei:

bt1_btn.onRelease = bt2_btn.onRelease = bt3_btn.onRelease = function():Void{
moveObj(quad_mc, this.vals);
loadMovie("arquivo.swf", _root.area);
}

Só que ai no exato momento em que clico no botao o loadMovie carrega o swf e fica feio. Eu gostaria de clicar no botão.. o mc fazer seu movimento e depois carregar o arquivo.

Como faço isso?

Valeu

Edição feita por: O malinha, 02/12/2005, 18:47.


#14 Sheepman

Sheepman

    Veterano

  • Usuários
  • 1497 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS

Posted 03/12/2005, 02:46

/* E evento onTweenEnd é executado quando a transição é concluída. */
alvo.onTweenEnd = function(vals:Array):Void{
 this.onTweenUpdate();
}
Tcharan! Tenta colocar teu loadMovie aí! :)
E outra coisa, não uso loadMovie não, vai deixar de existir essa coisa... Usa a classe MCL:
http://www.fugpr.com...rtigos&a=v&id=7

Abraço
Mozart Petter - http://www.mozartpetter.com/
Não sabe o que é herança? clique aqui e descubra.

#15 Marcell Marra

Marcell Marra

    Expert

  • Usuários
  • 569 posts
  • Sexo:Não informado
  • Localidade:São José dos Campos - SP

Posted 03/12/2005, 11:51

Caramba, como o AS 2.0 é bem mais fácil...

Essas classe tão facilitando pra caramba a vida de quem não tem muita paciência pra desenvolver!
m

procuro criatividade




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq