Sigo en mi proyecto de plataforma y me encuentro con el siguiente problema: Deseo que mi H?roe pueda caer como m?ximo desde 64 pixeles de altura, sin problema. Pero si cae de mas altura muera.. Gracias de antemano por la ayuda! Saludos.
No seria mas facil verificar eso por vspeed?
Entra al juego en modo Debug y revisa el vspeed que alcanza desde la altura que tu quieres, entonces pones:
[gml]
if vspeed > //Velocidad de caida para morirse
{
//Lo que quieres que haga.
}
[/gml]
Si,lo intent? tal como se?alas: if vspeed >10 {muerto=1} y el la colisi?n con el suelo, reviso si la variable muerto esta en 1 o 0. Funciona pero no queda muy preciso. Ademas por alg?n motivo, cuando el personaje salta hacia un objeto solido la vspeed sigue avanzando. Por este motivo pienso en hacerlo mediante el conocimiento de la altura en pixeles.
otra forma un poco mas complicada.
Citar
event create
yy=0; //declara la variable YY
event step (para morir en caida al aire) o Event collision con el suelo.
if !place_free(x,y+4) //verifica si esta sobre algo a una y +4
{yy=y;} //si esta sobre algo guarda la actual Y en la variable YY
if vspeed>0 and (y > yy+64) //si esta cayendo y Y es mayor que YY+64 pxl
{muere} //muere osea ejecuta el codigo.
Edit: //64 es la altura que puse lo cambias por la que quieres.
Ya que solo guarda en YY la posicion actual de Y siempre que este sobre algo, al caer es logico que no hay nada abajo asi que no guarda la posicion Y en YY, lo que da como resultado que la ultima vez que guardo en yy=y fue cuando estuvo sobre el suelo, asi que al estar cayendo comparo si esta 64 pxl mas abajo de la ultima vez que toco suelo, osea de donde cayo.
Nota: deje la explicaci?n pero tambi?n lo rectifique por que estaba guardando la posici?n X y esa es horizontal y necesitaba guardar era la de "Y" que es la de ca?da osea la vertical.
Cita de: elviskelley en Octubre 31, 2011, 03:20:13 PM
otra forma un poco mas complicada.
event create
xx=0;
event step
if place_free(x,y+4)
{xx=x;}
if vspeed>0 and (x > xx+64)
{muere}
//64 es la altura que puse lo cambias por la que quieres.
Me explicas bien como funciona este metodo? Esta interesante y util.
Hola, gracias por tu ayuda pero no lo entend?: ?a ti te resulta este c?digo? No lo entend? a primera vista. De todas formas lo prob? y no me resulto. Le hice cambios y tampoco.
Tu c?digo dice:
1.- Inicio la variable xx en cero.
2.- en el evento steep, si el personaje esta libre de colisi?n en su propia 'x' y en su 'y' + 4 ( es decir no tiene nada abajo), la variable 'xx' toma el valor de la variable 'x' (?Por qu? toma la el valor de la variable horizontal?)
3.- Si la velocidad vertical, del personaje, es mayor que cero y 'x' ( que es la posici?n horizontal), es mayor a la suma 'xx' ( que seguramente ya tiene un valor mayor a 'x' les sumas los pixeles verticales que que representan la altura entonces muere...
No me cuadra o no logro entenderlo.
Por mientras voy a investigar el "point_distance"
:-[ Ya me estoy acercando parece: Estoy utilizando la forma de distancia de ca?da libre: Distancia = (1/2)*(gravedad*(tiempo^2)). La gravedad la conocemos en nuestro juego. Lo que hay que hacer es tomar el tiempo de ca?da y tenemos la distancia. El tiempo lo voy a medir en unidades de steep (tiempo =+1). La colisi?n toma el fin del tiempo pero ? como tomamos el comienzo? ? como saber cuando el personaje entra en ca?da libre. Considerando que esta puede venir de un salto o del reposo?....
En eso estoy. pero tengo que salir ahora. Saludos
Si hab?a cometido un error, ya edite el post y rectifique el error, tambi?n lo explique para que lo entiendas a perfecci?n.
:D Bueno quiero compartir con ustedes el c?mo lo resolv?:
Objeto: objPersonaje
Evento create:
pd=0; // punto de distancia
h=0; //altura
Evento steep
pd = point_distance(0,0,vspeed,hspeed)
Evento colisi?n con el suelo
h= floor(abs(pd))
Creo que con esta explicaci?n basta ya que ahora que tengo la altura puedo silogizar una ca?da.
Saludos!