Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Retroceso de Arma implementado en jugador  (Leído 628 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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

Atentamente: (y con cariño)
Fabricio Oliva López

twitter: @fabriciOliva
discord: Fabriyin#2173
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Void

Respuesta #1 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.

 
Los siguientes usuarios dieron las gracias a este tema: Fabriyin


Desconectado Fabriyin

Respuesta #2 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

Atentamente: (y con cariño)
Fabricio Oliva López

twitter: @fabriciOliva
discord: Fabriyin#2173