Muy buenas! Estoy haciendo un juego de "endless running" y he llegado a la conclusión de que al personaje le hace falta una sombra reflejada en el suelo (endless running es el típico juego como canabalt o robot unicorn attack) en principio pensé lo más sencillo, crear un objeto que tenga la forma de la sombra y hacerlo semi transparente y colocarlo en un sitio inmovil, ya que el personaje tampoco se mueve de forma horizontal, solo salta, pero caí en la cuenta de que la sombra no siempre va a estar a la misma altura. Lo que necesito sería que hubiera un objeto siempre bajo el personaje y que se adaptase automáticamente al objeto que tenga mi personaje debajo. ¿Hay algún comando para hacer esto que pido? Es un poco dificil, ya que lo que pido es que se adapte, por ejemplo que cuando salte de una plataforma a otra a un nivel mas bajo, en el momento en el que el personaje esté en el aire en perpendicular a las 2 plataformas, la sombra iría desapareciendo de la primera plataforma e iría apareciendo por la siguiente, sin que pase directamente de una a otra (como una sombra real)
PD: la sombra será una elipse simple.
Gracias!
podrias intentar con un sprite de la sombra en 3 formas: en el suelo, salto medio y salto alto
y hacer una variable que depende que tan alto brinque el personaje cambie de sprite tu sobmbra
La forma dependiendo de la altura no es problema, la altura del salto siempre será la misma, lo que busco es que la sombra se adapte a la forma de la superficie que tiene el personaje debajo, por ejemplo, el primer nivel será en una calle y tendrá que saltar, por ejemplo, un cubo de basura. Lo que necesito es que el escenario (en este caso, el suelo por el que corre y el mismo cubo de basura) conforme viene hacia la izquierda (el personaje se mantiene quieto horizontalmente, es el escenario el que se mueve hacia la izquierda para dar la sensación de que está corriendo) sea detectada su forma y el sprite de la sombra se adapte a ella. Sería como poner la mano a cierta altura sobre una superficie proyectando una sombra en dicha superficie, al pasar un objeto por debajo de la mano, la sombra tomará la forma de ese objeto.
Este post ha caído en el olvido, escribo el mensaje para revivirlo, aun sigo sin dar con la tecla
Puedes dibujar un sprite de sombra por partes, en columnas de 1 de ancho, calculando la distancia hasta el suelo para cada parte.
Dibujar el sprite por partes se haría con sprite_draw_part:
draw_sprite_part(sprite,subimage,left,top,width,height,x,y)
En esta función left y top son las coordenadas del sprite desde donde quieres empezar a dibujar, y width y height son el ancho y largo de la parte del sprite a dibujar desde las coordenadas dadas en left y top, también a tener en cuenta es que draw_sprite_part ignora los puntos de origen del sprite.
Entonces por ejemplo, puedes usar un for para separar el sprite en columnas y un while para calcular la distancia hasta el suelo:
for (i=0;i<sprite_get_width(sprite),i+=1){
j = 0;
while(!collision_point(X+i,Y+j,Suelo,1,1) && j<480)
j += 1;
draw_sprite_part(sprite,subimage,i,0,1,sprite_get_height(sprite),x+i,y+j);
}
Te dejo un ejemplo con el código para la sombra optimizado, en este código en particular los objetos donde se puede proyectar una sombra deben tener un parent en común, que debe ser el que se use para verificar colisiones en el while.
Es realmente ASOMBROSO. Exactactamente lo que buscaba, es magnifico. ¡Muchisimas gracias, realmente perfecto!
Sin duda que la función draw_sprite_part() es sumamente poderosa !
La gran mayoria de ejemplos que he visto y utilizan draw_sprite_part() son sumamente buenos y este, por supuesto, no es la exepción ;D
Este va directo a mi colección de ejemplos !
Saludos !