Todo problema complejo lo abordaremos aproximándonos poco a poco
1.-Hacer que un MC se desplaze desde su posición
Código ActionScript :
//supongo que tienes un MC con nombre de instancia "mimc" en tu película
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
function moverMc(e:Event){
mimc.x+=2
mimc.y+=3
}
2.-Hacer que el MC se desplaze con una velocidad dada, p.e. 5 pixels por cada fps
Código ActionScript :
//supongo que tienes un MC con nombre de instancia "mimc" en tu película
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
mimc.vel=5 //lo pongo aquí poque va a poder variar
mimc.angulo_rad=30*Math.PI/180;
function moverMc(e:Event){
mimc.x+=mimc.vel*Math.cos(mimc.angulo_rad)
mimc.y+=mimc.vel*Math.sin(mimc.angulo_rad)
}
Bueno, ya que MAth.cos y MAth.sin son funciones muy leeentas, no tenemos porqué calcularlas SIEMPRE -en cada ENTER_FRAME- así que podemos escribir
Código ActionScript :
//supongo que tienes un MC con nombre de instancia "mimc" en tu película
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
mimc.vel=5 //lo pongo aquí poque va a poder variar
mimc.angulo_rad=30*Math.PI/180;
mimc.inc_x=mimc.vel*Math.cos(mimc.angulo_rad)
mimc.inc_y=mimc.vel*Math.sin(mimc.angulo_rad)
function moverMc(e:Event){
mimc.x+=mimc.inc_x
mimc.y+=mimc.inc_y
}
3.-Mover un MC hacia un punto dado X0,Y0
Código ActionScript :
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
mimc.vel=5 //lo pongo aquí poque va a poder variar
X0=350
Y0=300
mimc.angulo_rad=Math.atan2(mimc.x-X0,mimx.y-Y0)
mimc.inc_x=mimc.vel*Math.cos(mimc.angulo_rad)
mimc.inc_y=mimc.vel*Math.sin(mimc.angulo_rad)
function moverMc(e:Event){
mimc.x+=mimc.inc_x
mimc.y+=mimc.inc_y
}
4.-Complicándolo: nuestro MC sólo se pude mover en horizontal, vertical o en diagonal
Aquí hay mucho que explicar. Así que algo de literatura. Nuestro MC se puede mover de 8 modos distintos. Así que vamos a hacer un ejercicio en el que un MC se mueva aleatoriamente en cualquiera de esas direcciones
Código ActionScript :
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
mimc.vel=5 //lo pongo aquí poque va a poder variar
var angulo:Array=new Array(0,45,90,135,180,225,270,315)
mimc.angulo_rad=Math.PI/180*angulo[(Math.floor(angulo.length*Math.random()))]
mimc.inc_x=mimc.vel*Math.cos(mimc.angulo_rad)
mimc.inc_y=mimc.vel*Math.sin(mimc.angulo_rad)
function moverMc(e:Event){
mimc.x+=mimc.inc_x
mimc.y+=mimc.inc_y
}
Bueno, el problema es que nuestro MC no queremos que se mueva aleatoriamente, sino hacia un punto dado. Luego, en cada ENTER_FRAME vamos a tener que averiguar el ángulo que queremos, y usar de nuevo esos fastidiosos Math.cos y Math.sin. Así que voy a plantear el problema con un array de objetos. No te preocupes que es fácil
Código ActionScript :
mimc.addEventListener(Event.ENTER_FRAME,moverMc)
mimc.vel=5 //lo pongo aquí poque va a poder variar
var direcciones:Array=new Array({x:1,y:0},
{x:1,y:1},
{x:0,y:1},
{x:-1,y:1},
{x:-1,y:0},
{x:-1,y:-1},
{x:0,y:-1},
{x:1,y:-1});
var index=Math.floor(8*Math.random())
mimc.inc_x=mimc.vel*direcciones[index].x;
mimc.inc_y=mimc.vel*direcciones[index].y;
function moverMc(e:Event){
mimc.x+=mimc.inc_x
mimc.y+=mimc.inc_y
}
Bueno, eso no es tan así, porque en diagonal se movería el doble de rápido. Se soluciona, cuando sea horizontal o vertical, haciendo que la x y la y valgan Math.sqrt(2) -la raiz cuadrada de 2-
5.-Queda que, en el onenterFrame, averiguar la dirección que quiere tomar, pero lo dejo para luego