Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Fabriyin en Marzo 21, 2021, 05:31:45 pm

Título: Retroceso de Arma implementado en jugador
Publicado por: Fabriyin en Marzo 21, 2021, 05:31:45 pm
Saludos a todos, hace tiempo que dejé el Game Maker Studio algo abandonado pero me dieron ganas repentinas de seguir programando y disfrutando hacer videojuegos. No sé si la comunidad habrá muerto o está algo inactiva pero parece que no mucho, espero me puedan ayudar

El asunto es que estoy intentando hacer un pequeño juego implementando la mecánica del arma de rayos de Half-Life 2, la que cuando cargabas mucho te podía impulsar y quise ver cómo podría ser algo así pero más centrado a movilizarte con los rayos que para hacer daño a los enemigos

la mayoría de mi código lo estoy sacando de un canal en inglés que hizo un recoil para que el arma se moviera un poco para atrás al disparar e intenté hacer lo mismo pero en el objeto jugador y intenté varias cosas pero nada parece funcionar o al menos no tan bien
recoil = max(0, recoil - 1);
if(mouse_check_button(mb_left)) && !place_meeting(x,y,obj_pared)
{
    recoil = 10;
}
x = x - lengthdir_x(recoil,obj_gun.image_angle);
y = y - lengthdir_y(recoil,obj_gun.image_angle);

el código funciona mejor de lo que me esperaba, impulsa al jugador pero cuando choca con un bloque de pared envés de detener el movimiento del jugador simplemente el jugador atraviesa la pared y se queda en ella, cuando intento usar el rayo otra vez para salir simplemente se queda atrapado y no se mueve más ni con las teclas de movimiento ni con el rayo del arma
básicamente entra pero no sale

si alguno de ustedes les da alguna idea de cómo podría evitar que esto pase los escucho, muchas gracias por la atención y espero que tengan un buen día
Título: Re: Retroceso de Arma implementado en jugador
Publicado por: Void en Marzo 22, 2021, 07:52:10 pm
Haz que el código compruebe colisiones progresivamente antes de cambiar la posición del objeto en lugar de cambiarla de golpe:

var recoil_check = recoil
do{
    var recoil_x = lengthdir_x(recoil_check,obj_gun.image_angle);
    var recoil_y = lengthdir_y(recoil_check,obj_gun.image_angle);
    recoil_check--
}until (!place_meeting(x-recoil_x,y-recoil_y,obj_pared) || recoil_check < 0)
x = x - recoil_x
y = y - recoil_y

Con ese código se prueba la posición final del objeto antes de moverlo, si la posición tiene colisión se revisa la anterior a esa, y si esa tiene colisión la anterior, y así hasta que encuentre un posición libre donde poner el objeto.
Título: Re: Retroceso de Arma implementado en jugador
Publicado por: Fabriyin en Marzo 24, 2021, 04:30:35 am
Muchas gracias!

toquetee un poco el código que hiciste porque en primera no funcionaba del todo bien y ahora ya está perfecto, muchas gracias enserio
ahora solo me queda jugar un poco con los valores de recoil para ver cómo queda mejor