Abril 15, 2016, 02:41:15 AM Ultima modificación: Abril 15, 2016, 02:44:12 AM por Black_Cat
hhhooola
estoy haciendo un juego de plataformas donde mi mascota puede lanzar una gaseosa en forma parabólica. Esto es, que el tiro salga hacia arriba y vaya cayendo, como si lanzaramos una pelota al aire.
La ilustracion del tiro que se quiere lograr está con una flecha en  amarillo:




el problema está en que la soda se queda trabada en el techo, un momento o un instante,  antes de caer. O bien antes de seguir con la trayectoria marcada en amarillo.



Como se ilustra en la imagen 2, el tiro se queda atascado un rato antes de caer. Las flechas indican que se queda girando, pero solo es por la animacion del sprite.

La cuestión es que no encuentro la manera de solucionarlo.
Paso a presentar los códigos implicados:


OBJ_SODA:
EV_Create
[GML]
image_speed = 0.7;
gravity = .5;
[/GML]

Ev_Colision con OBJ_Piso

[GML]
if (vspeed > 0){
    instance_destroy();
}[/GML]

bien, esta parte del código es para que se elimine la soda únicamente cuando esté cayendo, asi entonces debería (en teoria) traspasar los pisos si va desde abajo hacia arriba, pero nunca a la inversa(arriba hacia abajo).

Y el OBJ_piso no tiene mucho misterio ya que no tiene código alguno. Solo es sólido
El problema raíz esta en que no puedo hacerlo no sólido puesto que de otra manera la mascota se cae por el mapa.

Alguna sugerencia de solucion? :D



La razón del problema es que se usa un objeto sólido y un evento colisión con ese objeto, las colisiones con objetos sólidos mueven a la instancia a su posición anterior, por eso la soda se queda trabada, y cae hasta que su velocidad vertical se hace mayor a cero.
La solución es detectar la colisión con place_meeting, y dejar de usar el evento colisión.

La verdad la solucion terminó siendo bastante sencilla  :P
Investigando un poco en internet, adicionalmente, me topé con que, en verdad el uso de objetos solidos puede traer varios inconvenientes con respecto a las collisiones y hay por ahí gente que a final de cuentas termina desaconsejandolo. :-\
mirá vos, no tenía idea de que algo tan trivial pudiese causar tanto problema XD
gracias por la ayuda