Comunidad de diseño web y desarrollo en internet online

Problemas con movimiento movieclip AS 3.0

Citar            
MensajeEscrito el 17 Abr 2011 08:07 am
Hola, estoy haciendo una aventura gráfica en AS 3.0 y tengo un pequeño problema con el movimiento del personaje principal.
He conseguido que al pinchar en cualquier punto del escenario con el ratón, el personaje (un movieClip) se mueva hasta allí con una velocidad constante siempre igual.
El problema son las direcciones en diagonal.
No se como hacer que mi personaje se mueva del punto A al B (en diagonal) con una velocidad constante igual que con las otras 4 direcciones.
Estoy usando el evento ENTER_FRAME y el código que estoy utilizando para las diagonales es este:


william.x += (xScenarioMouse - william.x)/speedW;
william.y += (yScenarioMouse - william.y)/speedW;

(william es el movieclip)
(xScenarioMouse e yScenarioMouse, son la posición del ratón donde quiero que se mueva)
(speedW es la velocidad a la que quiero que se mueva)

Este código está mal, lo se, con esto va hacia ese punto, pero con desaceleración y eso no me interesa.

Si alguien me puede ayudar se lo agradezco enormemente!.

Gracias

Por yukino21

7 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 17 Abr 2011 05:07 pm
lo que buscas se llama velocidad angular , su implementacion en Actionscript es muy sencilla, ocupas obtener un angulo entre la posiciones de los 2 objetos en este caso el raton y el movieclip, despues solo calculas las componentes x,y con las funciones trigonometricas, por ejemplo:

Código ActionScript :

var vx:Number = 0;
var vy:Number = 0;
var speed:Number = 5;
var minimDist = 5;

function enterFrameHandler(e:Event):void
{
   
      var dx:Number = mouseX - william.x;
      var dy:Number = mouseY - william.y;
      var dist:Number = Math.sqrt(dx * dx + dy * dy);

      var angle:Number = Math.atan2(dy,dx);

      vx = Math.cos(angle) * speed;
      vy = Math.sin(angle) * speed;

      william.x +=  vx;
      william.y +=  vy;

      if (dist < minimDist)
      {
         trace("llego a la posicion del mouse")
      }
}



es una implementacion muy sencilla ya que fisicamente pueden implicar mas fuerzas friccion etc, pero ya te meterias en ecuaciones mas complejas como las de easign..para esto estan librerias como TweenMax,que en su composición se encargan de estas ecuaciones.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 17 Abr 2011 06:25 pm
Hola,

Muchas gracias por responderme. Lo he probado y funciona!!

He aprendido algo nuevo y he solucionado un problema, 2x1!!

Por yukino21

7 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 26 Abr 2011 11:01 pm
A mi esto no me da...por que? O sea el movieclip se llama william?

Por juanfer

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 26 Abr 2011 11:11 pm
Yo estoy en la escena, y ahi tengo el mc con nombre de instancia "contenedor_mc"

No me funciona.

var vx:Number = 500;
var vy:Number = 250;
var speed:Number = 5;
var minimDist = 500;

function enterFrameHandler(e:Event):void
{

var dx:Number = mouseX - contenedor_mc.x;
var dy:Number = mouseY - contenedor_mc.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);

var angle:Number = Math.atan2(dy,dx);

vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;

contenedor_mc.x += vx;
contenedor_mc.y += vy;

if (dist < minimDist)
{
trace("llego a la posicion del mouse")
}
}

Por juanfer

6 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.