Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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: Inventario y levantar armas del suelo?  (Leído 669 veces)

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

Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
en: Marzo 25, 2015, 02:18:55 pm
Hola, antes que nada disculpen la molestia.

Ya hace unos cuantos meses me estoy acostumbrando al GM pero todavía hay cosas que me cuestan entender. Por suerte en este foro busqué muchas dudas y ya solucioné bastantes de mis problemas, pero creo que me compliqué mucho en tratar de hacer un inventario y "lootear" armas del suelo.

Estuve viendo en las descargas del foro y no pude hacerlo, hasta leí que se puede hacer en una room diferente, pero no entendí sinceramente, hay muchas "guías" que no explican todo, por eso vengo a consultar. Tampoco me quiero complicar la vida, mi idea era que apretando la "I" se abra un inventario donde esten los items que recolecté, pero creo primero tendría que poder recolectar esos items, ya que no se como hacerlo. Por ej, tengo que hacer que mi player pegue dispare sin armas porque no se como "levantar" armas y equiparlas.

Se que no es fácil, menos para un principiante que lleva poco más de medio año, pero si me pueden aclarar algunas cosas como para que intente les agradecería.

Hasta luego!

EDIT: Aunque yo prefiera un inventario en el que yo pueda elegir la magnitud de mismo, como para agarrar varios items (Comida, bebida, armas, etc) si para ir aprendiendo me conviene más hacer un inventario chico que esté siempre visible, no es molestia. Toda ayuda es bienvenida, todo sea por aprender :)
« última modificación: Marzo 25, 2015, 02:41:53 pm por Elpacoviejo »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado penumbra

Respuesta #1 en: Marzo 25, 2015, 06:52:51 pm
Imagina que hay en el suelo un objeto munición que si lo recoges te da balas. El objeto munición sería algo como

CREATE
num_balas = 10
libre = true

STEP
if (libre == false)
     instance_destroy()          //El item se autodestruye al ser recogido por el jugador


Para recoger el item, se puede usar el evento de colisión entre el jugador y el item. Voy a hacerlo en el jugador:
if other.libre == true                //¿El item está "libre"?
{
     total_balas += other.num_balas   //Sumar las balas que otorga el item a las balas del jugador
      other.libre = false                     //El objeto fue recogido, ya no está "libre"
}

El objeto munición se puede destruír en el mismo evento de colisión, en lugar de usar su evento STEP, pero lo hice así para que veas cómo un objeto puede cambiar la variable de otro, y cómo ese otro objeto revisa esa variable y se desencadena una acción cuando se cumple una condición. Si en lugar de que el objeto munición se pierda y sus balas se sumen en automático, quieres que el "objeto" se vaya a un inventario, puedes tener un arreglo en el jugador

CREATE
 
balas = 0; granadas = 1; kitMedico = 2
inventario[balas] = 0
inventario[granadas] = 0
inventario[kitMedico] = 0

Cuando tomes un item, en el evento de colisión, la línea
 total_balas += other.num_balas

la cambiarías por
 
inventario[balas] += 1      //Sumar un paquete de municiones al elemento[0] del arreglo

« última modificación: Marzo 25, 2015, 07:02:23 pm por penumbra »

 


Desconectado quiero aprender

Respuesta #2 en: Marzo 25, 2015, 07:08:43 pm
Hola
Bueno eso es algo un poco complicado, yo también llevo bastante tiempo con el game maker y a un no se hacer muchas cosas difíciles.

Encontre un video que te puede servir en YouTube y me ayudo mucho con el inventario, la cosa es que esta en ingles pero solo has los mismo que el.
enlace:

 


Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
Respuesta #3 en: Marzo 25, 2015, 08:59:32 pm
Me sirvió bastante tanto el código como el vídeo! Pero que parte del code tendría que cambiar para por ejemplo agarrar la munición con la tecla E? Se hacerlo pero que parte tendría que cambiar para que no me tire errores.

 


Desconectado penumbra

Respuesta #4 en: Marzo 25, 2015, 09:36:43 pm
Pero que parte del code tendría que cambiar para por ejemplo agarrar la munición con la tecla E? Se hacerlo pero que parte tendría que cambiar para que no me tire errores.
Errores hay muchos, así que tendrías que aclarar que errores son esos.
if (other.libre == true) and (keyboard_check_pressed(ord('E')) )
{
      inventario[balas] += 1
      other.libre = false                     //El objeto fue recogido, ya no está "libre"
}

 


Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
Respuesta #5 en: Marzo 26, 2015, 12:14:17 am
Pero que parte del code tendría que cambiar para por ejemplo agarrar la munición con la tecla E? Se hacerlo pero que parte tendría que cambiar para que no me tire errores.
Errores hay muchos, así que tendrías que aclarar que errores son esos.
if (other.libre == true) and (keyboard_check_pressed(ord('E')) )
{
      inventario[balas] += 1
      other.libre = false                     //El objeto fue recogido, ya no está "libre"
}

Me sirvió, muchas gracias! Ahora voy a ver como dibujo un inventario :)

 


Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
Respuesta #6 en: Marzo 26, 2015, 02:43:59 am
Hola, siento molestar de nuevo, pero tuve un problema...
Todo venía bien, aún no pude dibujar el inventario ni entender como aplicarlo, pero estoy priorizando otras cosas. Como tu me dijiste pude hacer lo de la munición en el suelo y recogerla, pero intenté añadir un arma al suelo, recogerla y no pasa nada. Ni siquiera me cambia al sprite del hombre con el arma, que puedo estar haciendo mal? :'(

 


Desconectado penumbra

Respuesta #7 en: Marzo 26, 2015, 02:52:21 am
Indica por favor qué código estás usando y en qué evento. Es necesario para saber dónde está el error. Ten en cuenta que si quieres recoger un objeto arma, tienes que hacer un evento de colisión para el objeto arma (aparte del que ya hiciste para las municiones)

El problema de esto es que si tienes muchos items distintos, no es muy inteligente agregar un evento de colisión para cada uno (obvio que se puede, pero no es lo mejor). Es más óptimo agrupar todos los items recolectables bajo un objeto padre común. Eso haría que con un solo evento de colisión se pudieran recoger distintos items (munición, dinero, armas, accesorios, etc)

 


Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
Respuesta #8 en: Marzo 26, 2015, 03:00:29 am
Hm, entonces me "rendiría" más crear un objeto que colisione con el player y usar los mismos códigos?.

Con el obj_arma use otra colisión también, tal vez mi error es que quedó casi todo igual al de munición. Tendría que validar que dispare.

 


Desconectado penumbra

Respuesta #9 en: Marzo 26, 2015, 03:07:08 am
Con el obj_arma use otra colisión también, tal vez mi error es que quedó casi todo igual al de munición.

Para el objeto arma, no debes usar esto:
inventario[balas] += 1

porque el +1 se va a ir al elemento destinado a las balas en el arreglo del jugador. Siguiendo el ejemplo de mi primer respuesta, tendrías que declarar una variable arma = 3, y luego, en el evento de colisión
inventario[arma] += 1
Para que el +1 del arma se vaya a su lugar correcto. No debes mezclar munición con armas.

Ni siquiera me cambia al sprite del hombre con el arma, que puedo estar haciendo mal? :'(
Tienes que verificar que inventario[arma] sea mayor o igual a 1, eso indicaría que tienes un arma.
if (inventario[arma] >= 1)
     sprite_index = sprite_player_con_arma
« última modificación: Marzo 26, 2015, 03:10:28 am por penumbra »

 
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos


Desconectado Elpacoviejo

  • Habitual
  • *
  • Puntos: 25
  • Mensajes: 13
    • Ver Perfil
Respuesta #10 en: Marzo 26, 2015, 03:11:45 am
Justo estaba editando mi respuesta anterior para mostrarte como me estaba quedando pero se me reinició la pc así que voy de nuevo.

Justamente pensé lo mismo que tú, y cree un nuevo inventario[armas] = 0

Y en la colisión también lo cambié por inventario[armas] += 1

Tal vez esto ayude un poco más, mi jugador antes disparaba sin necesidad de agarrar armas o municiones, en el create del personaje tengo variable ammo y max_ammo, también firing y la velocidad y daño de mi obj_bala.