Buenas, llevo varias horas probando y buscando información sobre como hacer para que si mi jugador esta mas arriba que un enemigo este se vea por debajo.
Es decir.. Ahora mismo tengo un personaje y un enemigo, los dos con depth 0, mi idea es que cuando uno esta mas arriba que el otro en coordenada Y, este se vea por debajo del otro.
Ahora mismo el código que tenia (pero no funciona) es este:
if place_meeting(x,y,obj_jugador) < (self.y) {
depth = +1;
} else {
depth = -1;
}
Aclaro que "self" es el enemigo, y esto esta en Draw.
A ver si me quitáis la duda de la cabeza.. Gracias de antemano!!
Hola zHeMaa
Borra ese código que pusiste.
En vez de eso, en el objeto enemigo, pone lo siguiente en su Step Event:
if y < obj_player.y { depth = 1 }; else { depth = -1 }
Eso hará que la depth del enemigo varíe entre 1 y -1
1: para ponerse detrás del player cuando está "más arriba en la pantalla"
-1:para ponerse delante del player cuando su "y" esté más abajo que la del player.
Esto sólo funciona si eres consistente con el "y_origen" de cada sprite. Ej: que ambos tengan su origen arriba, o en los pies, o en el centro.
Favor nota que cambia la depth de dibujo del enemigo en todo momento, si tienes bloques con depth = 0, puede ser que el enemigo atraviese esos bloques cuando no es necesario, causando un error visual.
Lo que puedes hacer es asignarle al player una depth -2. Así haces que la depth del enemigo cambie entre -1 y -3, para que tanto el enemigo como el player se dibuje, siempre por encima del resto de los objetos de tu juego.
Saludos
Cita de: BssString en Septiembre 12, 2018, 01:25:03 AM
Hola zHeMaa
Borra ese código que pusiste.
En vez de eso, en el objeto enemigo, pone lo siguiente en su Step Event:
if y < obj_player.y { depth = 1 }; else { depth = -1 }
Eso hará que la depth del enemigo varíe entre 1 y -1
1: para ponerse detrás del player cuando está "más arriba en la pantalla"
-1:para ponerse delante del player cuando su "y" esté más abajo que la del player.
Esto sólo funciona si eres consistente con el "y_origen" de cada sprite. Ej: que ambos tengan su origen arriba, o en los pies, o en el centro.
Favor nota que cambia la depth de dibujo del enemigo en todo momento, si tienes bloques con depth = 0, puede ser que el enemigo atraviese esos bloques cuando no es necesario, causando un error visual.
Lo que puedes hacer es asignarle al player una depth -2. Así haces que la depth del enemigo cambie entre -1 y -3, para que tanto el enemigo como el player se dibuje, siempre por encima del resto de los objetos de tu juego.
Saludos
Funciona a la perfección, y mejor aun porque tengo un código para hacer body block (justo la barriga de los jugadores y enemigos, piernas y cabeza no.) y queda de 10, ya que si choca por el medio hace el body block y si pasa uno por encima del otro la depth es simplemente perfecta!
Ahora bien, a la hora de poner varios enemigos..
Debería cambiar "obj_player" por "other" (globalizando todo, enemigos y jugador)???? ya que lo he probado este ultimo y parece no funcionar.
Gracias!!
Hola zHeMaa
Si usas GMS 1.4, puedes intentar con el siguiente código:
var y_gap = (view_yview[0]-y)/(64+min(room_height,view_hview[0]))
depth = -1 + clamp(y_gap,-1,0)
Lo que hace es calcular tu altura relativa a la view, en un rango de 0 a -1, donde 0 significa que estás lo más arriba y -1 significa que estás lo más abajo.
Luego le asigna como depth el mismo rango, pero desfasado en uno para que ahora el rango sea -1 a -2, tal como antes, el objeto que corra este código se dibujará encima de cualquier objeto con depth 0 (que es la que por defecto se asigna en Game Maker).
Elimina el código anterior que ya no es necesario, ahora ponle ese mismo código tanto al player como a los enemigos.
Si usas GMS 2, no puedes usar esta técnica por la forma en que GMS2 gestiona la depth. En este caso tienes que crear un código de depth sorting, lo ideal es usar DS GRIDs.
Puedes buscar en internet alguna solución o comentar aquí para que busquemos una manera sencilla de hacer un depth sorting.
Saludos