Octubre 20, 2019, 10:03:59 PM Ultima modificación: Mayo 19, 2020, 06:42:02 AM por T789
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

#1 Octubre 21, 2019, 07:39:53 PM Ultima modificación: Octubre 21, 2019, 09:53:53 PM por dixon
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
Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.

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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

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

ese código va en la pistola, no en el player xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Ya entendi

Otra pregunta como haria para pegar o anclar el objeto de la pistola al objeto player

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...

que otro metodo existe, este no me convenze y al moverse el player este no se mueve al momento exacto con el

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.
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]