Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: CarloxTheBoy en Febrero 10, 2014, 04:10:36 PM

Título: Problema con las colisiones, salto al infinito
Publicado por: CarloxTheBoy en Febrero 10, 2014, 04:10:36 PM
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.

Título: Re:Colision Check en GML + Problema con el cambio de gravedad
Publicado por: elviskelley en Febrero 10, 2014, 05:51:09 PM
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;}
Título: Re:Colision Check en GML + Problema con el cambio de gravedad
Publicado por: CarloxTheBoy en Febrero 10, 2014, 07:31:27 PM
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.

Título: Re:Colision Check en GML + Problema con el cambio de gravedad
Publicado por: elviskelley en Febrero 11, 2014, 05:04:10 PM
corrige la mask de tu sprite y elimina el presice collision en tu sprite.
Título: Re:Colision Check en GML + Problema con el cambio de gravedad
Publicado por: CarloxTheBoy en Febrero 11, 2014, 05:29:44 PM
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.
Título: Re:Problema con las colisiones, salto al infinito
Publicado por: CarloxTheBoy en Febrero 14, 2014, 05:42:28 PM
Up. Sigo sin solucionarlo.