Buenas, la verdad es que desde ayer me estoy peleando con esto y ya no sé que he hecho mal.

Todo esto en el step del personaje, en el create está radio declarada.

distancia_x = mouse_x - N4_Player.x;
distancia_y = mouse_y - N4_Player.y;
distancia = sqrt ( distancia_x*distancia_x  + distancia_y*distancia_y );

if (radio < distancia)
    {
anguloDelRatonRespectoAlPlayer = arctan2(distancia_y,distancia_x);
anguloDelRatonRespectoAlPlayer = radtodeg(anguloDelRatonRespectoAlPlayer);

if (anguloDelRatonRespectoAlPlayer > 22.5)&&(anguloDelRatonRespectoAlPlayer<=67.5) sprite_index = N4_diagonal_abajo_izq; //bueno
if (anguloDelRatonRespectoAlPlayer > 67.5)&&(anguloDelRatonRespectoAlPlayer<=112.5) sprite_index = N4_Jugador_Abajo; // bueno
if (anguloDelRatonRespectoAlPlayer > 112.5)&&(anguloDelRatonRespectoAlPlayer<=157.5) sprite_index = N4_diagonal_abajo_der; // bueno
if (anguloDelRatonRespectoAlPlayer > 157.5)&&(anguloDelRatonRespectoAlPlayer<=202.5) sprite_index = N4_Jugador_Izq; //Bueno
if (anguloDelRatonRespectoAlPlayer > 202.5)&&(anguloDelRatonRespectoAlPlayer<=247.5) sprite_index =  N4_diagonal_arriba_der;
if (anguloDelRatonRespectoAlPlayer > 247.5)&&(anguloDelRatonRespectoAlPlayer<=292.5) sprite_index =  N4_Jugador_Arriba;
if (anguloDelRatonRespectoAlPlayer > 292.5)&&(anguloDelRatonRespectoAlPlayer<=337.5) sprite_index = N4_diagonal_arriba_izq;
if (anguloDelRatonRespectoAlPlayer < 22.4)||(anguloDelRatonRespectoAlPlayer>=337.5) sprite_index = N4_Jugador;
    }


Funciona bien si el ratón está por debajo del player, pero por encima ya no funciona... ¿Qué estoy haciendo mal?

¡Saludos!
Visita mi proyecto: Space Cadet

Amigo no seria mas fácil q le pongas image_angle=angulo del mouse?
PURA VIDA



#2 Abril 20, 2014, 08:58:44 AM Ultima modificación: Abril 20, 2014, 09:02:04 AM por _-Caleb-_
Cita de: ocarina en Abril 19, 2014, 05:45:47 PM
Amigo no seria mas fácil q le pongas image_angle=angulo del mouse?

Si, pero todos sabemos cómo destroza gamemaker los sprites si los rotamos, por eso tengo 8 sprites con las 4 direcciones + diagonales :)

EDITO: Si con consigo arreglar esto en un par de días pues al final lo haré sin el ratón, sólo con el teclado, que es más fácil de implementar, pero me quedaré con la duda sobre qué coño estaba haciendo mal xD
Visita mi proyecto: Space Cadet

amigo intenta poner los valores en negativo!!!!
osea -202.5 -247.5 etc etc
PURA VIDA



#4 Abril 20, 2014, 11:06:07 AM Ultima modificación: Abril 20, 2014, 11:07:53 AM por penumbra
Cita de: _-Caleb-_ en Abril 20, 2014, 08:58:44 AM
Si, pero todos sabemos cómo destroza gamemaker los sprites si los rotamos, por eso tengo 8 sprites con las 4 direcciones + diagonales :)

No necesitas usar image_angle para rotar el sprite. Yo pensé que eran 8 sprites distintos, todos animados, pero si lo único que quieres es elegir entre 8 imágenes estáticas (eso es lo que entiendo), todas se pueden incluír en un solo sprite en lugar de tener 8 sprites. Primero, preparar las subimagenes en el orden correcto


Tu profesor de álgebra debe estar contento, pero estás eligiendo el camino más complicado.  :D  gm ya incluye funciones que te hacen la vida más fácil
[CREATE]
angulo = 0;
margen = 30;                    //Distancia umbral para que el objeto reaccione al ratón
image_speed = 0;


[STEP]
xx = abs(mouse_x - obj_player.x)
yy = abs(mouse_y - obj_player.y)
angulo = point_direction(x,y,mouse_x,mouse_y)      //Dirección del mouse respecto al jugador

if (xx <= ((sprite_width/2)+margen)  ) and (yy <= ((sprite_height/2)+margen)  )
{
    image_index = angulo * (image_number/360)
}


Como ves, no fue necesario calcular la resultante del vector, símplemente se revisa que la distancia horizontal (puntero-jugador) y la distancia vertical (puntero-jugador) sean menores a alguna distancia que funcione (el origen del sprite del jugador debe estar centrado). Usé X y Y en la comparación porque el sprite no es un cuadrado perfecto, es más alto que ancho, pero si el sprite del jugador tiene sus lados iguales, sólo necesitas comparar una sola distancia. Resultado.



#5 Abril 20, 2014, 11:15:33 AM Ultima modificación: Abril 20, 2014, 11:20:03 AM por _-Caleb-_
Cita de: penumbra en Abril 20, 2014, 11:06:07 AM
Cita de: _-Caleb-_ en Abril 20, 2014, 08:58:44 AM
Si, pero todos sabemos cómo destroza gamemaker los sprites si los rotamos, por eso tengo 8 sprites con las 4 direcciones + diagonales :)

No necesitas usar image_angle para rotar el sprite. Yo pensé que eran 8 sprites distintos, todos animados, pero si lo único que quieres es elegir entre 8 imágenes estáticas (eso es lo que entiendo), todas se pueden incluír en un solo sprite en lugar de tener 8 sprites. Primero, preparar las subimagenes en el orden correcto


Tu profesor de álgebra debe estar contento, pero estás eligiendo el camino más complicado.  :D  gm ya incluye funciones que te hacen la vida más fácil
[CREATE]
angulo = 0;
margen = 30;                    //Distancia umbral para que el objeto reaccione al ratón
image_speed = 0;


[STEP]
xx = abs(mouse_x - obj_player.x)
yy = abs(mouse_y - obj_player.y)
angulo = point_direction(x,y,mouse_x,mouse_y)      //Dirección del mouse respecto al jugador

if (xx <= ((sprite_width/2)+margen)  ) and (yy <= ((sprite_height/2)+margen)  )
{
    image_index = angulo * (image_number/360)
}


Como ves, no fue necesario calcular la resultante del vector, símplemente se revisa que la distancia horizontal (puntero-jugador) y la distancia vertical (puntero-jugador) sean menores a alguna distancia que funcione (el origen del sprite del jugador debe estar centrado). Usé X y Y en la comparación porque el sprite no es un cuadrado perfecto, es más alto que ancho, pero si el sprite del jugador tiene sus lados iguales, sólo necesitas comparar una sola distancia. Resultado.




En realidad son 8 imágenes animadas, perdón por no decirlo :) Pero probaré algo así a ver si va, gracias penumbra :)

EDITO: Funciona de lujo con imágenes estáticas pero como te digo yo tengo una animación de movimiento por cada uno de los ejes.

Igualmente éste código lo ha hecho un amigo con el que colaboro en mi proyecto, el profesor de álgebra contento es el suyo :P

Aunque si, a mi me gusta complicarme, más por ignorancia que por gusto xD

Visita mi proyecto: Space Cadet

Cita de: _-Caleb-_ en Abril 20, 2014, 11:15:33 AM
En realidad son 8 imágenes animadas, perdón por no decirlo :) Pero probaré algo así a ver si va, gracias penumbra :)

El código de las distancias y el ángulo sería el mismo, sólo cambiaría el método para elegir el sprite animado. Lo más directo, aunque más laborioso de escribir es el de usar ifs, como en tu mensaje original. En lugar de usar image_index usas otra variable para guardar la dirección dentro del IF. En lugar de ifs se puede usar un switch. También se pueden guardar previamente los 8 sprites animados en un ds_map y bastaría una sola instrucción para elegir el sprite correcto según la dirección.

Cita de: penumbra en Abril 20, 2014, 11:25:26 AM
Cita de: _-Caleb-_ en Abril 20, 2014, 11:15:33 AM
En realidad son 8 imágenes animadas, perdón por no decirlo :) Pero probaré algo así a ver si va, gracias penumbra :)

El código de las distancias y el ángulo sería el mismo, sólo cambiaría el método para elegir el sprite animado. Lo más directo, aunque más laborioso de escribir es el de usar ifs, como en tu mensaje original. En lugar de usar image_index usas otra variable para guardar la dirección dentro del IF. En lugar de ifs se puede usar un switch. También se pueden guardar previamente los 8 sprites animados en un ds_map y bastaría una sola instrucción para elegir el sprite correcto según la dirección.

Juas gracias, luego lo meto que estaba añadiendo otras cosillas antes :)

La verdad es que a veces leo el reference y me pongo a probar cosas sin ningún sentido, luego se me queda esta cara si no funciona:

¡Saludos!
Visita mi proyecto: Space Cadet