Pues estuve buscando por internet como hacerlo, y todos lo hacen con acciones y no programando. Por eso queria saber si hay alguna forma de hacerlo programando o solo puedo hacerlo con acciones.

Todo lo que se puede hacer con Acciones (DnD) se puede hacer con GML.
¿Qué condiciones necesitan los enemigos para cambiar de dirección?

No se muy bien a que te refieres, el metodo que yo uso para mover algo o alguien es el mas simple del mundo x = x + 5 esa es mas o menos la velocidad que me gustaria que tuvieran, y me gustaria que solo cambiaran cuando choquen con algo solido.

#3 Septiembre 03, 2018, 02:15:29 AM Ultima modificación: Septiembre 25, 2018, 09:40:13 PM por Hezz
Hola minordioso! Creo que querés que tu enemigo se mueva a la derecha sin detenerse hasta encontrarse con una pared u otro objeto, y que luego cambie de sentido. Si es así, yo lo haría de esta forma.

Objeto enemigo
Create
[gml]dir = -1; //Direccion en la que se mueve. -1 izquierda. 1 derecha.
spd = 4; //Velocidad de movimiento

hsp = 0; //Velocidad horizontal
vsp = 0; //Velocidad vertical

glimit = 12; //Límite de la velocidad de caída vertical
g = 0.5; //Gravedad

//Colisionar con otros obj_enemigo
friend_collision = false;[/gml]

Step
[gml]//Movimiento
hsp = spd * dir;
//La velocidad horizontal es igual a la velocidad de movimiento
//multiplicado por la dirección


//Gravedad
if (vsp < glimit) {vsp += g;}


//Colision horizontal
if (place_meeting(x+hsp, y, obj_suelo)) {
    while(!place_meeting(x+sign(hsp), y, obj_suelo)) {x += sign(hsp);}
    hsp = 0;
   
    //Invertir el lado al que caminar. Por ejemplo, -1 * -1 = 1, de izquierda a derecha.
    dir *= -1;
}

//Colision vertical
if (place_meeting(x, y+vsp, obj_suelo)) {
    while(!place_meeting(x, y+sign(vsp), obj_suelo)) {y += sign(vsp);}
    vsp = 0;
}


//Detectar si no hay suelo
if (instance_position(x+hsp + (dir * (sprite_width/2)), y + sprite_height/2 + 1, obj_suelo) == noone) {dir *= -1; hsp = 0;}


//Colisionar con otros obj_enemigo
if (friend_collision){
    //Colision horizontal
    if (place_meeting(x+hsp, y, obj_enemigo)) {
        while(!place_meeting(x+sign(hsp), y, obj_enemigo)) {x += sign(hsp);}
        hsp = 0;
       
        //Invertir el lado al que caminar. Por ejemplo, -1 * -1 = 1, de izquierda a derecha.
        dir *= -1;
    }
   
    //Colision vertical
    if (place_meeting(x, y+vsp, obj_enemigo)) {
        while(!place_meeting(x, y+sign(vsp), obj_enemigo)) {y += sign(vsp);}
        vsp = 0;
    }
}


//Mover al enemigo
x += hsp;
y += vsp;[/gml]
Este código mueve al enemigo en la direccion que deba moverse hasta que se encuentre a un "obj_suelo" frente suyo o un espacio vacío en el camino, y luego cambia de dirección.
Tiene una variable en el evento create que es "friend_collision", que al estar activada hace que al chocar con otro obj_enemigo cambie de sentido, como con la pared.

Espero que te sirva! :D