Comunidad de diseño web y desarrollo en internet online

Trigonometría de un shooter (misiles)

Citar            
MensajeEscrito el 12 Jul 2008 10:53 pm
Tengo un shooter sencillo, donde las naves andan en todas direcciones, y el "heroe" tiene un control similar a Asteroids...

Lo que intento es pasar a una visión de perfil dependiendo la escena, pero para esto deseaba volverlo mas interesante:

Las naves se cargan con una rotación aleatoria, de la cual depende el movimiento de estas:

Código :

var vel:Number=5;
this._rotation=random(360);
onEnterFrame=function () {
if (_rotation>180) {
this._y+=vel*Math.cos(Math.PI/180*this._rotation);
this._x-=vel*Math.sin(Math.PI/180*this._rotation);
} else {
this._y-=vel*Math.cos(Math.PI/180*this._rotation);
this._x+=vel*Math.sin(Math.PI/180*this._rotation);
}
}


algo asi....
Para atacar al heroe, uso el mismo código en los "lasers"...

Lo que deseaba era cambiar los lasers por misiles que siguieran a la nave principal...

Utilice el mismo código, junto con:

Código :

onEnterFrame=function () {
ax=_root.nave._x-this._x;
ay=_root._y-this._y;
ang=Math.atan2(ay,ax)+90;
this._rotation=ang;
}


Esto funciona muy bien, pero los misiles giran demasiado rapido cuando te acercas a ellos...

Pregunta:

1)¿Como podria lograr que los misiles giren gradualmente?
Sabría como hacerlo en teoría, pero al pasarloa gradians se me complica la cosa...

2)¿Cuál es la diferencia exacta entre grados y gradians?
Porque se que son diferentes, pero deseo comprenderlo por completo...

Por riajiru

38 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 13 Jul 2008 04:15 pm
Todo el problema viene por la conversión de radianes a angulos, la función atan2 devuelve un valor en radianes, debes convertirlo a ángulos para poder utilizar _rotation. Por ejemplo:

Código :

onEnterFrame = function () {
   var ax:Number = _root.nave - this._x;
   var ay:Number = _root._y - this._y;
   var rad:Number = Math.atan2(ay, ax);
   var ang:Number = (rad*180)/Math.PI;
   
   this._rotation = ang;
};


Como mismo existen los mm, cm, dm, m y km para medir segmentos, en trigonometría lo ángulos se meiden an ángulos o radianes.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Jul 2008 04:29 pm
Uppss.....

Si gracias, pero resulta que si tenia así el código, pero olvide colocarlo aqui...
Si me funciona bien, pero si prestas atencion, eso devuelve un valor inmediato del angulo, haciendo que siempre señale a "nave"...

Lo que yo necesito es que, dependiendo ese valor, "misil" gire lentamente hacia la direccion e donde se encuentra "nave"...

Que en lugar de que simplemente lo señale, aumente o disminuya 2 grados (por ejemplo) cada frame, hasta que su angulo sea igual a "ang"...

No se si logre explicar claramente la idea, pero pues es la mejor manera que se me ocurre...

Por riajiru

38 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 06:23 pm
Pues, creo que ya te diste la respuesta, en el onEnterFrame del misil pones el código de rotación y el número de grados que quieres rotar en cada ciclo, si al rotar es mayor del ángulo final, simplemente regresas al ángulo final. Obvio que primero tienes que validar la dirección para saber cuando es mayor que él ángulo final...

Por El_Beto_TM

156 de clabLevel

1 tutorial

Genero:Masculino  

Mexicali, Baja California

firefox

 

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