Buenas, estoy aprendiendo a usar GML con mi metodo habitual (ensayo y error), y mientras intentaba hacer un codigo para el salto, por alguna razon no funciona. Por lo general hago el sistema con los botones del GM (el D&D), y cuando consigo que funcione lo hago todo en un solo bloque de codigo. En este caso consegui hacerlo con D&D, pero al pasarlo a GML no lo consigo hacer.
Este es el codigo de GML. Se ejecuta al pulsar la barra espaciadora.
if (position_meeting (self, self+1, solid))
{
vspeed = -12
}
Creo que el problema es el position_meeting, por que en D&D lo hice poniendo un "Check Colision", y no encontré nada similar en GML, supuse que sería position_meeting.
En D&D funcionó con un "Check Colision" (x=0, y=1, solid objects, relative) y un "Set the vertical speed -12".
Mi segundo problema es que mi personaje se queda anclado en el suelo.
Investigando, se debe a este step del obj_player:
if (position_empty (self, self+1))
{
gravity = 0.4
}
else
{
gravity = 0
}
En teoría, cuando esta en el suelo la gravedad debería ser 0, lo cual evitaria los problemas de que el personaje se "ancle" al suelo, y que cuando se desprende del suelo la gravedad cambia a 0.4 para que caiga. El problema es que lo he comprobado, y la gravedad siempre es 0.4, por lo cual no se puede mover lateralmente sin saltar antes.
el del salto en la tecla de la barra espacio.
if (!place_free(x,y+1))
{
vspeed = -12
}
el del event step para la gravedad.
if (place_free(x,y+1) and vspeed <16) then
{gravity=.5} else {gravity=0;}
Bueno, eso ha funcionado mas o menos, pero he encontrado los siguientes problemas:
-Si te chocas con algo desde la parte de arriba del sprite se congela unos pixels mas abajo del objeto durante medio segundo, y despues choca contra el.
-Si mantengo la tecla "arriba" cuando doy a un objeto bastante bajo, se pega a el en vez de caer directamente.
-Si choco a un objeto por la izquierda o por la derecha, se teleporta al infinito.
Coloco el proyecto aquí, para que alguien mire mejor los problemas. Realmente no se muy bien que estoy haciendo mal.
corrige la mask de tu sprite y elimina el presice collision en tu sprite.
No parece solucionar el problema. He quitado la mask precisa y puse una rectangular.
De hecho, ahora mismo puse un sprite rectangular para hacer pruebas, pero mas tarde le cambiare el sprite a uno mucho mas detallado, por lo que probablemente necesitaré usar precise collision.
P.D: Me he fijado que el problema de colisionar lateralmente solo sucede al saltar.
Up. Sigo sin solucionarlo.