Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Mordha en Septiembre 01, 2018, 12:49:52 AM

Título: Sobre cambios en la dirección y el sprite usando alarmas
Publicado por: Mordha en Septiembre 01, 2018, 12:49:52 AM
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.
Título: Re:Sobre cambios en la dirección y el sprite usando alarmas
Publicado por: BssString en Septiembre 01, 2018, 01:32:44 AM
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