Noticias

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

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: Ayuda con armaduras o resistencias  (Leído 95 veces)

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

Conectado Zhekken

  • Visitante
  • *
  • Puntos: 11
  • Mensajes: 5
  • Sexo: Masculino
    • Ver Perfil
en: Agosto 11, 2019, 09:44:10 pm
Hola, soy nuevo en esto de  Game Maker (solo se algo básico de programación) actualmente uso la versión standar de GMS ... tengo pensado hacer un proyecto pequeño para de ahí pasar a algo mas complejo, el caso es que quiero hacer como una especie de protecciones para el personaje y enemigos, para que me entiendan mejor, pongamos de ejemplo que tenemos tres objetos, obj_jugador, obj_enemigo y un obj_bala... el enemigo tiene una vida base de 100, y la bala del jugador hace un daño de 50, lo que yo quiero hacer es crear una resistencia para que el enemigo en vez de recibir 50 de daño, reciba menos gracias a la armadura base que se le de al enemigo (o al jugador) ...

estuve probando con esto en el evento create del enemigo:

vida = 100
ataque = 50
armadura = 2
resistencia = ataque / armadura

la colision del enemigo con la bala (esto dentro del ob_enemigo):

vida -= ataque
ataque = resistencia
if vida <= 0 instance_destroy()

instance_destroy(obj_bala)

entonces mi idea era que el enemigo al hacer contacto con la bala, esta se destruya, y el enemigo reciba el daño pero reducido a la mitad, ya que tiene una armadura que lo protege un 50% del daño que reciba del obj_bala .. en este caso en vez de recibir 50, debería recibir 25 de daño pero el enemigo sigue recibiendo 50 de ataque con el primer disparo, con el segundo si reduce a la mitad (si le pongo 1000 de vida, este recibe de primer ataque 50 pero los demás si son de 25).

otro error que tengo es con el obj_bala cuando sale del jugador:

obj_jugador evento step:

if keyboard_check_pressed(ord("F"))instance_create(x,y,obj_bala)

cuando la bala colisiona con el enemigo, y hay varias balas en la Room, se destruyen todas cuando una sola colisiona con el enemigo, ¿como hago para que solo se destruyan de manera individual?

espero haberme explicado bien, si ustedes tienen un mejor método para hacer algún tipo de resistencia parecido al que quiero entonces díganme por favor y si funciona con % (porcentajes) entonces mucho mejor, muchas gracias por tomarse su tiempo de leerme  :D .

pido disculpas por preguntar dos cosas en un mismo Post.

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado getnoff

Respuesta #1 en: Agosto 12, 2019, 09:26:08 am
Hola.
La primera cuestión es sencilla, pasa porque pones las asignaciones en mal orden, deben ir así:
ataque = resistencia;
vida -= ataque;
if vida <= 0 instance_destroy();
Pensemos con lógica:  si el ataque no se asigna antes pues sigue siendo 50, por ende la vida resta 50 y sólo después el ataque se establece a 25 cuando ya se ha restado, por eso hay que establecer primero que el ataque es la mitad (25) para que luego la vida se reste 25 correctamente.

Y ahora lo segundo, tengo una duda que no creo que estés usando instance_destroy(obj_bala) porque el instance destroy no contiene argumentos, asumo que tienes puesto un with(obj_bala) instance_destroy();
Bien el problema es que cuando escribes "obj_bala" está abarcando a todas las instancias de la bala, así que para sólo referirte a la que colisiona al enemigo puedes hacer lo siguiente, en el obj_bala en el evento colisión con el enemigo, sólo pon:
instance_destroy();
Como estamos en el obj_bala, game maker sabe por la colisión a cual instancia nos estamos refiriendo.

 
Los siguientes usuarios dieron las gracias a este tema: Zhekken


Conectado Zhekken

  • Visitante
  • *
  • Puntos: 11
  • Mensajes: 5
  • Sexo: Masculino
    • Ver Perfil
Respuesta #2 en: Agosto 12, 2019, 10:16:11 am
Hola.
La primera cuestión es sencilla, pasa porque pones las asignaciones en mal orden, deben ir así:
ataque = resistencia;
vida -= ataque;
if vida <= 0 instance_destroy();
Pensemos con lógica:  si el ataque no se asigna antes pues sigue siendo 50, por ende la vida resta 50 y sólo después el ataque se establece a 25 cuando ya se ha restado, por eso hay que establecer primero que el ataque es la mitad (25) para que luego la vida se reste 25 correctamente.

Y ahora lo segundo, tengo una duda que no creo que estés usando instance_destroy(obj_bala) porque el instance destroy no contiene argumentos, asumo que tienes puesto un with(obj_bala) instance_destroy();
Bien el problema es que cuando escribes "obj_bala" está abarcando a todas las instancias de la bala, así que para sólo referirte a la que colisiona al enemigo puedes hacer lo siguiente, en el obj_bala en el evento colisión con el enemigo, sólo pon:
instance_destroy();
Como estamos en el obj_bala, game maker sabe por la colisión a cual instancia nos estamos refiriendo.


Muchas gracias, todo solucionado :D
« última modificación: Agosto 12, 2019, 10:25:33 am por Zhekken »