hola a todos! Estoy haciendo unos juegos de plataformas muy sencillos, pero tengo problemas más grandes que el juego mismo. Verán, las colisiones me están fallando mucho, el player se queda atascado cada rato y a veces sale volando y cosas así. No sé por que me pasa esto. El código de colisiones que tengo es así:

Evento: Player, colisión con muro
[gml]
vspeed = 0;
move_outside_solid(direction,32);
[/gml]

y además, por si acaso, muestro el código de movimiento:


Evento Step:
[gml]
//Movimiento
if place_free(x+4,y) && keyboard_check(ord('D'))
x +=4;
if place_free(x-4,y) && keyboard_check(ord('A'))
x -=4;

//gravedad
gravity_direction = 270;
if place_free(x,y+1)
gravity = 1;
else
gravity = 0;

//Salto
if !place_free(x,y+1) && keyboard_check(vk_space)
vspeed = -16;
[/gml]

Y bueno, normalmente funciona, pero hay muchos errores. Quisiera que me ayudaran para mejorar este sistema de colisiones, gracias...xD
PD: Sí, los muros son sólidos, por si acaso...
alaberga regué el café.

BA:STFW&RTFM

El error está en el código de colisión. La velocidad se debe cambiar hasta el final porque eso también modifica a la variable direction. La salida del sólido se debe realizar en dirección opuesta al movimiento, entonces el código quedaría así:
[gml]
move_outside_solid( direction+180, -1 );
vspeed = 0;
[/gml]
Pero este código sólo contempla las colisiones en dirección horizontal, falta la parte que controla las colisiones en dirección vertical. Adjunto un ejemplo de antiguo de plataformas sencillo, que hice hace tiempo.

Esta es la forma más fácil de programar un juego de plataformas, pero no es la más óptima, los porqués se explican en estos artículos:
http://www.comunidadgm.org/articulos/colisiones-con-tiles-(programacion)/
https://www.yoyogames.com/tech_blog/40

Estoy preparando un tutorial de plataformas con tiles, espero publicarlo pronto.

No entiendo bien ese sistema  :-X .
Puedes intentar explicármelo? para poder adaptarlo mejor a mi juego
alaberga regué el café.

BA:STFW&RTFM