Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: LowHertzs en Abril 27, 2014, 03:12:09 AM

Título: [Solucionado]Quitar solo 1 de una variable global?
Publicado por: LowHertzs en Abril 27, 2014, 03:12:09 AM
Hola!, pues mi pregunta es muy simple, pero llevo un rato dándole vueltas y no encuentro que pueda ser.

Resulta que uso una variable global que se llama "health", que al iniciar empieza en 3, y la cual dibuja sprites de 3 corazones en la parte superior de la pantalla.

Mi problema viene que lo que quiero que pase, es que al tocar a un enemigo el jugador, a esa variable se le reste uno, consigo que se le reste pero mi problema viene en que se le resta continuamente si se queda pegado y se llega a poner la variable a -999.

Yo quiero que si el enemigo toca mi personaje 1 vez, le reste 1, no le reste mientras se queda pegado.

Probé haciendo uso del siguiente código:
health-=1

Pero sigue restando infinitamente cuando toco al enemigo.

Que podría ser? saludos~
Título: Re:Quitar solo 1 de una variable global?
Publicado por: eams1986 en Abril 27, 2014, 04:34:37 AM
Mira este código pero no está completo
if place_meeting (x,y,obj_collision);
{ Si.Colisiona }
Else
{Si no colisiona }
Título: Re:Quitar solo 1 de una variable global?
Publicado por: penumbra en Abril 27, 2014, 04:39:11 AM
Cita de: LowHertzs en Abril 27, 2014, 03:12:09 AM
Que podría ser? saludos~

Por sí solo, el código no tiene nada e malo (es una simple resta). Hablas de que al tocar a un enemigo, a la variable se le resta uno. Suponiendo que el código esté en un evento de colisión, cuando éste contacto ocurre, GM resta 1, tal como indica el código, pero al siguiente paso (ocurren muchos pasos en una fracción de segundo) lo más probable es que todavía el enemigo esté haciendo contacto, por lo que se vuelve a ejecutar el código, y al siguiente paso, probablemente haya colision, y así...

Seguro habrás notado que en michos juegos, una vez que tocan al jugador, hay un momento corto en el que el jugador queda en estado invencible, en el cual no lo afectan otros contactos. Obvio esto es temporal y dura 1, 2 o 3 segundos y luego el jugador vuelve a admitir daño. Puedes usar una variable y una alarma, la primera para saber si se permite restar vida (dañar) al jugador, la segunda para controlar el tiempo que el jugador dura en modo invencible y luego restablecer la variable que permite hacer daño
Título: Re:Quitar solo 1 de una variable global?
Publicado por: LowHertzs en Abril 27, 2014, 01:13:51 PM
Muchas gracias a ambos!

@Penumbra hice lo que me dijiste y funciona perfecto.

cree una variable global que se llama "golpeado" y empieza en true, luego un evento step donde si choca con el enemigo y la variable está en true, resta -1 a la variable global vida, y después de eso establece la variable golpeado en false.

Luego haciendo uso de una alarma se reactiva tras 2 segundos.

Gracias~