Tienes que programarte tú el movimiento. Usar el "start moving in direction"; o esas flechas rojas, no mola, es normal que se atasque :)
CREATE:
[gml]xVelo = 0; yVelo = 0;[/gml]
-Al iniciar el moverte a la derecha, pon xVelo = 5. A la izquierda, xVelo = -5. Arriba, yVelo = -5. Abajo, yVelo = 5. SÓLO UNA VEZ en cuanto inicias el movimiento.
STEP:
[gml]if (xVelo != 0) if (place_free(x+xVelo, y)) x += xVelo else xVelo = 0;
if (yVelo != 0) if (place_free(x, y+yVelo)) y += yVelo; else yVelo = 0;[/gml]
No lo he probado pero tiene buena pinta, prueba y nos dices qué tal :) la idea es que tú manejas tus propias variables de movimiento, y la clave es que SÓLO TE MUEVES HACIA CIERTO LUGAR si hay place_free en ese lugar. Si hay muro no te mueves (o quedarías atascado) y cancelas el movimiento.
IMPORTANTE: funciona para CUALQUIER velocidad, por alta que sea NUNCA se quedará atascado (aunque debe ser como mínimo 1 o -1 para evitar fallos, y mejor sin decimales, no sé qué podría pasar). PERO CON VELOCIDAD ALTA atravesarás muros. Si quieres evitar esto dímelo y te escribo rápidamente una mejora para evitarlo, que trata de usar bucles for (por ahora sin ellos es más fácil de entender :) )
CREATE:
[gml]xVelo = 0; yVelo = 0;[/gml]
-Al iniciar el moverte a la derecha, pon xVelo = 5. A la izquierda, xVelo = -5. Arriba, yVelo = -5. Abajo, yVelo = 5. SÓLO UNA VEZ en cuanto inicias el movimiento.
STEP:
[gml]if (xVelo != 0) if (place_free(x+xVelo, y)) x += xVelo else xVelo = 0;
if (yVelo != 0) if (place_free(x, y+yVelo)) y += yVelo; else yVelo = 0;[/gml]
No lo he probado pero tiene buena pinta, prueba y nos dices qué tal :) la idea es que tú manejas tus propias variables de movimiento, y la clave es que SÓLO TE MUEVES HACIA CIERTO LUGAR si hay place_free en ese lugar. Si hay muro no te mueves (o quedarías atascado) y cancelas el movimiento.
IMPORTANTE: funciona para CUALQUIER velocidad, por alta que sea NUNCA se quedará atascado (aunque debe ser como mínimo 1 o -1 para evitar fallos, y mejor sin decimales, no sé qué podría pasar). PERO CON VELOCIDAD ALTA atravesarás muros. Si quieres evitar esto dímelo y te escribo rápidamente una mejora para evitarlo, que trata de usar bucles for (por ahora sin ellos es más fácil de entender :) )