Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: T789 en Octubre 20, 2019, 10:03:59 PM

Título: Cambia Sprite de Arma en Direccion del Mouse [Solucionado]
Publicado por: T789 en Octubre 20, 2019, 10:03:59 PM
Hola busco un efecto en el que el arma cambie de sprite segun la direccion del mouse
Por si el cursor esta a la izquierda o derecha del player

Un ejemplo de lo que busco: https://richard08.itch.io/liar-laboratories
Hecho en GameMaker
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: dixon en Octubre 21, 2019, 07:39:53 PM
Hola, gusto en saludarle.

Podemos cambiar de sprite, tambien podemos cambiar la imagen del sprite, de igual manera podemos girar una imagen y por ultimo podemos escalar una imagen para obtener imagen espejo.

sprite_index: Es el sprite que usará el objeto.
imagen_index: Es la imagen que mostrará del sprite seleccionado. (Para sprites secuenciales con varias imágenes)
image_xscale: Es para escalar una imagen (hacerla grande o pequeña), pero también puedes voltearla como si fuera un espejo (Osea en otra dirección.)
image_angle: Para girar la imagen en un ángulo determinado cuyos valores varían de 0 a 360.

Ahora bien, los que usan game maker viejísimo (como yo que estoy comenzando a usar el 1.1 del año 2000 ), no pueden usar image_xscale ni imagen_angle, todo eso fue implementado en la version 6 del game maker si no e equivoco. Pero pueden obtener el mismo efecto que aparece en el juego mediante otros métodos.

En el juego mostrado vi un arma que gira a 360 grados, que cuando la posición x del mouse se coloca antes de la posicion x del player en tonces ocurre alguna de estas dos alternativas: El arma cambia de sprite o la imagen del sprite hace una escala.  Al parecer la experiencia del programador es buena como para dominar la xscale por lo tanto deduzco que esta usando la image_xscale.(Yo lo haria de esa forma pues me ahorraria un sprite espejo)

¿Como lograr el efecto de las dos formas?

1. Cambiando el sprite del arma
if(mouse_x<object_player.x){sprite_index=sprite_derecha}else{sprite_index=sprite_izquierda}

2.Escalando el arma
if(mouse_x<object_player.x){image_xscale=-1}else{image_xscale=1}

También pudieses crear un solo sprite y no usar xscale y tampoco requerir de un cambio de sprite. ¿como? creando un solo sprite que contenga todas las imagenes con vista a la derecha y las de vista a la izquierda. Y usarias:

image_index=point_direction(object_player.x,object_player.y,mouse_x,mouse_y)

1. Todos los códigos son para el objeto pistola, o para el objeto que la contenga
2. El objeto_plaer es el nombre del objeto player
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: kostra en Octubre 21, 2019, 10:27:04 PM
aquí mi versión xD

[gml]image_angle = point_direction(x,y,mouse_x,mouse_y)
if image_angle >= 90 && image_angle < 270
      image_yscale = -1;
else
    image_yscale = 1;[/gml]
no hace falta ni tener 2 sprites
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: T789 en Octubre 22, 2019, 05:00:11 PM
Disculpa no se si entendi mal pero creo encontre un defecto
1:Eso no rotaria y voltearia solo el sprite del obj_Player y como en el juego solo se rota el sprite de la pistola
2:Y si la pistola es un objeto aparte como haria para anclarlo al objeto del player

La verdad solo quisiera rotar la pistola si se puede
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: kostra en Octubre 22, 2019, 05:38:24 PM
ese código va en la pistola, no en el player xD
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: T789 en Octubre 23, 2019, 03:50:39 AM
Ya entendi

Otra pregunta como haria para pegar o anclar el objeto de la pistola al objeto player
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: jhgv en Octubre 23, 2019, 10:04:07 AM
Cita de: T789 en Octubre 23, 2019, 03:50:39 AM
Ya entendi

Otra pregunta como haria para pegar o anclar el objeto de la pistola al objeto player
Mira nene :3 me imagino que habran otras formas, te digo la mia; En el objeto de la pistola le modificas sus variables "x" e "y" a las del jugador ¿sabes como?
seria algo asi
[gml]x = obj_player.x [/gml]  y asi mismo con la "y" (el obj_player seria el objeto del jugador, Duh :p) y hay muchas mas formas ejemplo yo estaba buscando un editor de personajes y se me ocurrió (me ayudaron xd) que en el evento draw del personaje dibujara las manos, pies y todo separado y asi dejar que el jugador lo edite (obviamente ya no se podría usar el image angle, pero entonces hay que planear las animaciones a la hora de hacer los sprites) wueno esto no importa jeje solo lo de arriba...
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: T789 en Octubre 24, 2019, 04:38:31 AM
que otro metodo existe, este no me convenze y al moverse el player este no se mueve al momento exacto con el
Título: Re:Cambia Sprite de Arma en Direccion del Mouse
Publicado por: kostra en Noviembre 09, 2019, 06:38:53 PM
para que siga al player solo puedes haces
[gml]x = obj_player.x;
y = obj_player.y;[/gml]

Y si se ve feo por el retraso que causa al seguirlo, pues solo tienes que usar el eventro draw y dibujar el arma donde el  player a tiempo real, sin retraso alguno
[gml]draw_sprite_ext(sprite_index,image_index,obj_player.x,obj_player.y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);[/gml]

y listo.