Comunidad Game Maker

Ayuda => Desarrollo de Scripts => Mensaje iniciado por: 3dgeminis en Julio 20, 2018, 04:05:59 AM

Título: Diferencia de angulos
Publicado por: 3dgeminis en Julio 20, 2018, 04:05:59 AM
Autor: 3dgeminis

Versión de GM utilizada:  :GM8:

Descripción: Devuelve la diferencia entre 2 angulos.
Hace lo mismo que la funcion angle_difference de Game Maker Studio y sirve para GM8 y versiones anteriores.

Para que el script funcione correctamente, el valor de los angulos debe estar entre 0 y 360 grados.

Código del Script:
[gml]
angulo1=argument0 ///primer angulo
angulo2=argument1 ///segundo angulo

dif_ang=(angulo2 - angulo1) ///se restan los angulos

///el valor de dif_ang se fija entre los angulos 180 y -180
if dif_ang<-180 {dif_ang+=360}
if dif_ang>180 {dif_ang-=360}

return dif_ang ///devuelve la diferencia entre los angulos
[/gml]

Ejemplo de utilizacion:
[gml]
///Girar un sprite hacia donde apunta el raton

///STEP EVENT
ang=point_direction(x,y,mouse_x,mouse_y)

if image_angle>360 {image_angle-=360}
if image_angle<0 {image_angle+=360}

dif=diferencia_angulos(image_angle,ang)

image_angle+=min(abs(dif), 5)*sign(dif)
[/gml]
Título: Re:Diferencia de angulos
Publicado por: somnus en Julio 20, 2018, 07:42:19 PM
sigues utilizando GM8?. se sigue vendiendo?
Título: Re:Diferencia de angulos
Publicado por: 3dgeminis en Julio 22, 2018, 12:50:04 AM
Aun lo sigo usando 8), y no soy el unico. Me siento mas comodo al usarlo que las nuevas versiones(todavia no me acostumbro al GMS)
Título: Re:Diferencia de angulos
Publicado por: brunoxzx en Agosto 04, 2018, 07:13:55 AM
Me gusta está función, es de las más importantes cuando programas una IA. Te comento que existe esta versión de una linea que era muy usada antes que existiera el gm:studio, la dejo por aquí ya que es interesante el funcionamiento:

[gml]
/// angle_difference(angle1, angle2)
//
//  Returns the relative angle [-180..180] between the given angles.
//
//      angle1      1st direction in degrees
//      angle2      2nd direction in degress
//
/// GMLscripts.com/license
{
    return ((((argument0 - argument1) mod 360) + 540) mod 360) - 180;
}
[/gml]