Buen día. La intención de mi "juego" es mostrar a un pato que se mueva de izquierda a derecha pero actualizando los grados de dirección cada medio segundo: para la derecha 0, 30 y 330 grados; y para la izquierda: 180, 150 y 220 grados. Para iniciar el movimiento utilizo una alarma estableciendo la dirección con "choose". Sin embargo, no sé cómo hacer para que, al momento de chocar con un bloque, realice el mismo procedimiento pero a la izquierda (con los grados elegidos) y así indefinidamente. He intentado apagando la alarma al momento de chocar e iniciar otra pero no resulta.

De antemano muchas gracias.

#1 Septiembre 01, 2018, 01:32:44 AM Ultima modificación: Septiembre 06, 2018, 04:59:54 AM por BssString
Hola Mordha

Entendí poco lo que explicaste, pero intentaré ayudarte de todas formas.
Creo entender que tu pato se mueve izquierda o derecha y tienes problemas en hacer que vaya al lado opuesto cada vez que colisiona.

En el evento Colisión con el otro objeto:
speed = 0 //hace que el personaje se quede quieto
x = xprevious //hace que el personaje retroceda a su coordenada anterior (vuelve al momento cuando no hacía colisión)
y = yprevious //Así evitamos que atraviese objetos no_solidos, eso detectaría colisión en cada STEP y nunca se va a activar la alarma
alarm[0] = room_speed //Establece 1 segundo de delay para elegir nueva dirección


En el evento Alarm 0:
speed = 8 //Reactiva el movimiento del personaje (ponle la variable o valor que corresponda)
if abs(angle_difference(direction,0)) <= 30 { //detecta que el personaje esté mirando a la derecha (con 30 grados de holgura)
direction = choose(150,180,210) //Elige una de las direcciones hacia la izquierda
}
else { //si tu personaje estaba mirando a la izquierda
direction = choose(30,0,330) //Elige una de las direcciones hacia la derecha
}


EDIT: Detecté un error, añadí la función "abs" al "angle_difference" ya que esta función puede dar +30 o -30 como resultado. Con la función "abs" se obtiene su valor absoluto, ignorando el signo, así puedes hacer la comparación perfectamente y no dará problemas con ciertos ángulos (ej: si la diferencia de ángulos da -180º, cumpliría erróneamente la condición <= 30).
|-30| <= 30
|+30| <= 30

Saludos