Comunidad de diseño web y desarrollo en internet online

hacer que un MC persiga al cursor y colisione cuando lo toqu

Citar            
MensajeEscrito el 24 Dic 2009 03:06 am
Hola a todos !!!

Quería saber como hacer para que un MovieClip animado persiga al cursor del mouse y que colisionen cuando éste lo toque y haga algun efecto de explosión o algo asi :wink:

Muchas Gracias de antemano a todos !!!

salu2

Por masternicoN73

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Dic 2009 03:28 am
En realidad a lo que me refiero es crear un Cohete que persiga al puntero del mouse, apuntando la punta del cohete al mouse... y que cuando lo toque que explote el cohete y la flechita del mouse si es posible también !!!

Ojalá me puedan ayudar !!! :(

salu2

Por masternicoN73

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Dic 2009 07:36 am
Creo ya habertelo dicho... Cambia esa imagen que tienes en el avatar. Es en serio.

Lo que preguntas es fácil, solo tienes que conocer las coordenadas del mouse (_xmouse y _ymouse), luego vamos a ralentizar un poquito para que el misil no sea hiper veloz jeje. Esto lo haremos con una ecuación simple:

Código ActionScript :

misil._x += (_xmouse-clip._x)/velocidad;


Esto ralentizará la llegada del misil al mouse (Metido en una función ejecutado cada 0 segundos en un setInterval claro). Ahora para calcular que tan cerca esta, te recomiendo usar pitagoras asi puedes hacer más interesante y preciso el impacto. Pitagoras enseña a calcular distancias por la siguiente ecuación:

Código :

la hipotenusa al cuadrado es igual a la suma de los cuadrados de sus catetos


Como obviamente tenemos los catetos (x, y del misil menos las coordenas del mouse), solo resta evaluar la hipotenusa (Distancia) usando esa simple formula matematica que básicamente te quedará:

Código :

hipotenuse = Raiz Cuadrada de Cateto'' al cuadrado más Cateto'' al cuadrado


Si además quieres calcular la angulación, te costará un poco más, ya que debes recordar algo de trigonometría, básicamente tienes que sacar el angulo de tu triangulo...

Como esto es un poco más avanzado te dejo la formula que desarrolle yo para esto:

Código ActionScript :

function calcAngle(x1,x2,y1,y2):Number {
    var x3 = x2-x;
    var y3 = y2-y1;
    if (x3 == 0) {
        return (Math.atan2(y3, x3)*(180/Math.PI))-90;
    } else {
        return Math.atan2(y3, x3)*(180/Math.PI);
    }
};


Para finalmente crear el impacto, lo que tienes que hacer es almacenarlo en tu libreria y simplemente hacer un attachMovie cuando el misil "impacta" o sea la distancia llega a su rango determinado de explosión. Para hacerlo recuerda centrar el objecto antes de darle play a la animación. Finalmente borra el cursor del mouse si quieres con Mouse.hide() para dar una mejor sensación.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 24 Dic 2009 10:26 pm
Gracias por tu respuesta amigo Hernán, pero lo que pasa es que aunque ésto sea facil yo soy bastante novato con ActionScrip 2.0 y sólo se lo basico tipo gotoAndPlay, gotoAndStop, mouse.hide, mouse.show, stop y cosas asi, ya que yo para crear mis juegos no son demasiado buenos, y trato de hacerlos lo mejor posible pero aprendo de tutoriales de los que están acá, en youtube y sino busco en Google... pero más que nada me guio y aprendo por tutoriales, yo no fuí a ninguna escuela o curso de Flash o AS 1,2 o 3, porque esta estudiando en la secundaria y la vez la carrera de técnico en electrónica y luego otro curso de Reparador de PC que no tiene nada que ver con el Flash y AS jeje ...

Asi que bueno espero que me entiendas y me tengas un poquito de paciencia si no es mucha molestia amigo Hernán, pero sólo si tenés ganas y si podés sino bueno no importa...

En lo que se me complica es que probé el código que me diste, dibuje el cohete lo convertí en Simbolo de MC y le puse el código:

Código ActionScript :

function calcAngle(x1,x2,y1,y2):Number { 
    var x3 = x2-x; 
    var y3 = y2-y1; 
    if (x3 == 0) { 
        return (Math.atan2(y3, x3)*(180/Math.PI))-90; 
    } else { 
        return Math.atan2(y3, x3)*(180/Math.PI); 
    } 
};


y me tira un error que dice ésto:
En Las Líneas 1 y 9: La declaración debe aparecer dentro del controlador on/onClipEvent

Una pregunta ese código sería para que el cohete gire o rote según donde esté el flechita del mouse?

como prodría resolver éste problema?

Desde ya Muchas Gracias amigo !!! :wink:

salu2

Por masternicoN73

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Dic 2009 11:37 pm
Antes que nada, estas usando mal el código. Pero la verdad me parecio simpatico el ejemplo y además es Navidad, asi que me metí en flash y te hice esto rápidamente:





No critiques el diseño o el código que son solo 5 minutos de trabajo, la idea solo fue crear tu dilema.

Para lograrlo este fue el código que arme (Comentado para que lo entiendas):

Código ActionScript :

var velocidad:Number = 50; // Velocidad del misil, a más grande el número más lento.
var radio_explosion:Number = 2; // Que tan cerca estará el misil antes del boom
// Función para calcular el ángulo en que debe apuntar la "trompa" del misil 
function calcAngle(x1:Number, x2:Number, y1:Number, y2:Number):Number {
   var x3 = x2-x1;
   var y3 = y2-y1;
   if (x3 == 0) {
      return (Math.atan2(y3, x3)*(180/Math.PI))-90;
   } else {
      return Math.atan2(y3, x3)*(180/Math.PI);
   }
}
// Función para calcular que tan cerca esta el misil 
function calcDistance(x1:Number, x2:Number, y1:Number, y2:Number):Number {
   var x3 = x2-x1;
   var y3 = y2-y1;
   return Math.sqrt(x3*x3+y3*y3);
}
// Función de que hara cuando este demasiado cerca, el "BOOM" 
function boom():Void {
   angulo.text = "BOOM!!!";
   distancia.text = "BOOM!!!";
}

// Función que mueve literalmente el misil 
function moverMisil():Void {
   // Calculamos el ángulo y le sumamos 90° (Para corregir un problema de cuadrantes que tiene Flash)        
   var angle:Number = calcAngle(misil._x, _root._xmouse, misil._y, _root._ymouse)+90;
   // Rotamos el misil
   misil._rotation = angle;
   // Movemo el misil con una función de easing casera 
   misil._x += (_root._xmouse-misil._x)/velocidad;
   misil._y += (_root._ymouse-misil._y)/velocidad;
   // Calculamos que tan cerca tenemos el misil
   var dist:Number = calcDistance(misil._x, _root._xmouse, misil._y, _root._ymouse);
   // Informamos los valores 
   angulo.text = "Angulación: "+Math.round(angle)+"°";
   distancia.text = "Distancia: "+Math.round((dist-(misil._width/2)));
   // Determinamos si el mismo esta demasiado cerca, agregando el desplazamiento del centro a la puntal del misil y el radio de explosión determinado
   if ((dist-(misil._width/2))<=radio_explosion) {
      boom();
   }


}

// Activamos el código 
id = setInterval(moverMisil, 0);


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 27 Dic 2009 02:55 am

Hernán escribió:

Antes que nada, estas usando mal el código. Pero la verdad me parecio simpatico el ejemplo y además es Navidad, asi que me metí en flash y te hice esto rápidamente:





No critiques el diseño o el código que son solo 5 minutos de trabajo, la idea solo fue crear tu dilema.

Para lograrlo este fue el código que arme (Comentado para que lo entiendas):

Código ActionScript :

var velocidad:Number = 50; // Velocidad del misil, a más grande el número más lento.
var radio_explosion:Number = 2; // Que tan cerca estará el misil antes del boom
// Función para calcular el ángulo en que debe apuntar la "trompa" del misil 
function calcAngle(x1:Number, x2:Number, y1:Number, y2:Number):Number {
   var x3 = x2-x1;
   var y3 = y2-y1;
   if (x3 == 0) {
      return (Math.atan2(y3, x3)*(180/Math.PI))-90;
   } else {
      return Math.atan2(y3, x3)*(180/Math.PI);
   }
}
// Función para calcular que tan cerca esta el misil 
function calcDistance(x1:Number, x2:Number, y1:Number, y2:Number):Number {
   var x3 = x2-x1;
   var y3 = y2-y1;
   return Math.sqrt(x3*x3+y3*y3);
}
// Función de que hara cuando este demasiado cerca, el "BOOM" 
function boom():Void {
   angulo.text = "BOOM!!!";
   distancia.text = "BOOM!!!";
}

// Función que mueve literalmente el misil 
function moverMisil():Void {
   // Calculamos el ángulo y le sumamos 90° (Para corregir un problema de cuadrantes que tiene Flash)        
   var angle:Number = calcAngle(misil._x, _root._xmouse, misil._y, _root._ymouse)+90;
   // Rotamos el misil
   misil._rotation = angle;
   // Movemo el misil con una función de easing casera 
   misil._x += (_root._xmouse-misil._x)/velocidad;
   misil._y += (_root._ymouse-misil._y)/velocidad;
   // Calculamos que tan cerca tenemos el misil
   var dist:Number = calcDistance(misil._x, _root._xmouse, misil._y, _root._ymouse);
   // Informamos los valores 
   angulo.text = "Angulación: "+Math.round(angle)+"°";
   distancia.text = "Distancia: "+Math.round((dist-(misil._width/2)));
   // Determinamos si el mismo esta demasiado cerca, agregando el desplazamiento del centro a la puntal del misil y el radio de explosión determinado
   if ((dist-(misil._width/2))<=radio_explosion) {
      boom();
   }


}

// Activamos el código 
id = setInterval(moverMisil, 0);


Saludos, Hernán . -


WOW :shock: Que Buen Regalo de Navidad, es justo lo que quería, Gracias Papá Noel Hernán !! jaja :P ^^
No de enserio !!! Muchas Gracias por tomarte el trabajo de hacer justo lo que yo pedía y no puedo creer que tardaste 5 minutos nomás, yo habría tardado mínimo 1/2 hora jajaja ^^ Sos un Genio, Muchas Gracias amigazo y me alegro que haya gente tan buena como vos !!! :)

pero una preguntita y no te molesto más:
En ésta parte lo podría cambiar para que vez de que diga BOOM salte a otro fotograma dentro del MC cohete o misil donde tenga el dibujito de la explosión del mismo?


Código ActionScript :

// Función de que hara cuando este demasiado cerca, el "BOOM" 
function boom():Void {
   angulo.text = "BOOM!!!";
   distancia.text = "BOOM!!!";
}

¿como podría hacerlo?, es que manejo mas o menos bien lo de los fotogramas pero me faltan algunas cositas que no me salen jeje :)

Bueno si no podés contestar no importa, no te hagas problema, ya total para mi me alcanza con el SWF que me armaste, De nuevo Muchas Gracias Amigo ! :D ^^

Después cuando lo tenga que usar en mi juego lo modifico bien pero igual te salió de 10, sos un grande Hernán Gracias :) :wink:
salu2

Por masternicoN73

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Dic 2009 12:13 am
Tendrías que poner el código que quieres ejecutar en la función boom si, ejemplo para ir al fotograma 20:

Código ActionScript :

function boom():Void { 
    gotoAndStop(20);
}


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 21 Ene 2010 09:07 pm

Hernán escribió:

Tendrías que poner el código que quieres ejecutar en la función boom si, ejemplo para ir al fotograma 20:

Código ActionScript :

function boom():Void { 
    gotoAndStop(20);
}


Saludos, Hernán . -


ahh ok ahora en éstos días estoy por probarlo y agregarselo el jueguito que estoy haceidno desde hace varias semanas y después me fijo a ver como me va jeje

Muchas Gracias hernan y perdon que te respodí tan tarde, es que hace más se 1 semana que estube sin internet porque se me cortó el cable telefónico en la esquina de mi casa por el mal tiempo !!!

Gracias de nuevo y suerte amigo !!!

salu2

Por masternicoN73

11 de clabLevel



 

firefox

 

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