Buenas, tengo un problema y es que al hacer que el personaje se mueva en diagonal, en ocasiones, atraviesa los objetos solidos (esta puesto en el codigo que si va recto y toca un solido no se mueva y si va en diagonal y toca un solido se mueva pegado al solido, es decir, si va hacia arriba e izquierda y toca algo arriba se mueve a la izquierda) suele pasar que al llegar a la esquina de la room (la roomm esta rodeada con solidos para limitar el espacio) la atraviesa y se sale para fuera.
No se si me he explicado bien XD pero si alguien sabe porque puede ser agradeceria la ayuda. ;D
Puede ser que falten algunos ifs con condiciones para manejar esa situación.
Si sólo necesitas el deslizamiento sobre sólidos para no salir de la room, entonces el código se puede simplificar, además no es necesario poner sólidos alrededor de la room:
[gml]
if( x < (anchura/2) ) x = (anchura/2);
if( x > room_width-(anchura/2) ) x = room_width-(anchura/2);
if( y < (altura/2) ) y = (altura/2);
if( y > room_height-(altura/2) ) y = room_height-(altura/2);
[/gml]
anchura y altura son las dimensiones de la caja de colisión, y se dividen entre dos suponiendo que está centrada en la posición de la instancia.