Duda urgente sobre la vida de un personage

hola buenos dias, soy nuevo usando pilas engine.
Estoy haciendo un trabajo para el colegio y no se como poder hacer que la barra de vida mi personaje baje cuando el enemigo lo “lastime”; e intentado de un millon de maneras pero no lo consegui.
por favor necesito su ayuda.

desde ya gracias por su atencion.

ATT: Joaquin Garcia

Buenas @joaquin.garcia !

En mi juego “Veni,vidi,vici” v1.1.0 tengo implementada una barra de energia para cada uno de los actores “Romanos”, que va bajando cuando el actor pierde vida. Como supongo que no debes tener demasiado tiemo para revisar mi código (que es un poco largo y enrevesado) te hago un pequeño resumen por si te sirve de ejemplo.

No quiere decir que esta sea la única manera de hacerlo, y tampoco sé si es la mejor, pero a mi me funcionó muy bien.

Yo opté por iniciar la barra de energia dentro de la misma definición del actor “Romanos”, por que de esta manera aunque haya 10 actores “romanos” cada uno tendrá su propia barra de energia.

class Romanos(pilasengine.actores.Actor):
	def iniciar(self):
		#...
	        #codigo anterior propio del actor "romanos"
                #...

                self.vida = 100 # Esta es la "vida" del actor

		self.energia = self.pilas.actores.Energia() # Esta es la barra de energia
		self.energia.escala = 0.5
		
# La escala de la barra está adaptada a la medida de mi actor
	
	def actualizar(self):
# La barra siempre esté encima del actor aunque el actor se mueva
		self.energia.x = self.x
		self.energia.y = self.y +50 # La barra queda por encima de la cabeza del actor
			

Despues viene el tema de que la barra baje a medida que el actor pierde vida.

Si te fijas el actor tiene una vida de 100. Esto es importante!

Hay que tener en cuenta que la barra de energia LLENA tiene un valor de 100, y cuando está VACIA su valor es 0. Por eso me va bien que el actor “romanos” tenga 100 de vida, porque bastará con restar lo mismo al actor y a su barra, o incluso se puede hacer que el valor de la barra sea igual a la vida del actor.

Cuando hay una colisión que hace perder vida al actor:

class EscenaLucha(pilasengine.escenas.Escena):
	
	def iniciar(self):
		self.fondobatalla = self.pilas.fondos.Pasto()
		self.musica_lucha = self.pilas.musica.cargar('music/intensesuspense.ogg')
		self.musica_lucha.reproducir(True)

		# Programamos la colision entre los "romanos" y los enemigos		
						
		self.pilas.colisiones.agregar('Romanos','Enemigos',self.restar)
		
	def restar(self, uno, dos):
		# uno es este caso son los actores "Romanos"
                # dos se refiere a los actores "Enemigos"
                # Pongamos que por ejemplo en cada colision queremos que nuestro actor piertda 10 de vida:
						
		uno.vida -= 10  #Le restamos 10 a la vida de nuestro actor

		# Y ahora actualizamos la barra de energia para que su valor sea el mismo que la vida del actor:
		uno.energia.progreso = uno.vida
			

Aquí, claro está, te faltaria definir bastantes otras cosas, como por ejemplo lo que pasa si el actor pierde toda la vida. Pero eso ya es cosa particular de tu juego, y este es un ejemplo muy simplificado…

Espero que esto te ayude con tu pregunta, y si algo no te queda claro no dudes en volver a consultar!

Un abrazo y suerte en tu proyecto :wink:

PD: Si te fijas delante de pilas siempre hay escrito “self”. Esto es por que el juego está modulizado. Si tu juego no está modulizado no hace falta que pongas el “self” delante de “pilas”.

1 Like

Muchisimas gracias Jordinur te agradesco no te das una idea de lo que me has ayudado