Deslizar Mc Nas Posições (x,y)
#1
Posted 19/11/2005, 12:41
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
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
Posted 21/11/2005, 06:32
Valeu meu velho, perfeito!
Brigado!
Edição feita por: O malinha, 21/11/2005, 06:36.
#4
Posted 21/11/2005, 12:59
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
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
#6
Posted 21/11/2005, 15:16
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
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
#8
Posted 21/11/2005, 18:24
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
Posted 21/11/2005, 20:16
// 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...
#10
Posted 23/11/2005, 06:20
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?
Edição feita por: O malinha, 23/11/2005, 09:44.
#11
Posted 23/11/2005, 10:54
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
#12
Posted 23/11/2005, 13:15
Valeu pela paciência! [ rsrs ]
#13
Posted 02/12/2005, 18:46
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
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
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)










