Hola, como están! Feliz Año Nuevo para todos! Los mejores deseos para éste año que comienza.
Mi problema es el siguiente, tengo varias escenas, y se me complica utilizar actores y variables de otras escenas o de clases individuales.
Puntualmente lo que he hecho es un juego donde un personaje toma objetos que caen desde arriba, todo esto en la escena principal llamada EscenaJuego. Y cuando el tiempo llega a cero, necesito que estos elementos dejen de generarse, y éste es mi problema, no logro detener/eliminar a los actores que caen desde arriba.
Les muestro la parte de código:
class Pares(pilasengine.actores.Actor):
def iniciar(self):
self.velocidad = self.pilas.azar(1, 2)
self.y = 320
self.x = self.pilas.azar(-300, 300)
self.escala = 0.25
self.radio_de_colision = 35
self._elegir_imagen()
#... resto de métodos
class Impares(pilasengine.actores.Actor):
def iniciar(self):
self.velocidad = self.pilas.azar(1, 2)
self.y = 300
self.x = self.pilas.azar(-300, 300)
self.escala = 0.25
self.radio_de_colision = 35
self.aprender(pilas.habilidades.PuedeExplotarConHumo)
self._elegir_imagen()
#.... resto de métodos
class EscenaJuego(pilasengine.escenas.Escena):
def iniciar(self):
self.pilas.fondos.Fondo("palabras/fondo.png")
self.pilas.actores.Vampiro()
self.pilas.actores.Impares()
self.pilas.actores.Pares()
self.pilas.actores.Sonido()
self._crear_boton_volver()
self.puntaje = pilas.actores.Puntaje(280, 225, color="amarillo")
actor_texto = self.pilas.actores.Actor()
actor_texto.imagen = "palabras/textos/tiempo1.png"
actor_texto.escala = 1.2
actor_texto.x = -80
actor_texto.y = 225
actor_texto.x = [280, -80, -20], 0.5
texto_puntaje = self.pilas.actores.Actor()
texto_puntaje.imagen = "palabras/textos/puntaje.png"
texto_puntaje.escala = 1.2
texto_puntaje.x = 50
texto_puntaje.y = 225
texto_puntaje.x = [280, 80, 200], 0.5
self.contador = pilas.actores.Texto("")
self.contador.y = 225
self.contador.x = 30
self.contador.color = "amarillo"
self.actualizar_tiempo()
self.actualizar_puntaje()
self.reproducir_sonido_fondo()
pilas.tareas.siempre(5, self.crear_palabra_impar)
pilas.colisiones.agregar('Vampiro', 'Impares', self.eliminar_palabra_impar)
pilas.tareas.siempre(3, self.crear_palabra_par)
pilas.colisiones.agregar('Vampiro', 'Pares', self.eliminar_palabra_par)
pilas.tareas.siempre(1, self.descontar_tiempo)
# Esta funcion se ejecutara 1 vez por segundo
def descontar_tiempo(self):
global tiempo
tiempo = tiempo - 1
# reducimos el contador.
if tiempo >= 0:
self.contador.texto = str(tiempo) # tiempo es un numero, asi que lo tenemos que convertir a texto con str.
# Si tiempo es cero.
if tiempo == 0:
# Aquí es donde he intentado agregar funciones eliminar, pero no anda o me da error.
# Pares.eliminar() o self.crear_palabra_par.eliminar()
# Impares.eliminar() o self.crear_palabra_impar.eliminar()
global sonido_fondo
self.detener_sonido()
actor_tiempo = self.pilas.actores.Actor()
actor_tiempo.imagen = "palabras/textos/tiempo_juego.png"
actor_tiempo.y = -500
actor_tiempo.escala = 4
actor_tiempo.escala = [0.90], 1.5
actor_tiempo.y = [0], 1
#cuando tiempo llega a cero, luego de 5 seg nos envía a EscenaTerminar
pilas.tareas.una_vez(5, self.pilas.escenas.EscenaTerminar)
def actualizar_tiempo(self):
global tiempo
tiempo = 10
def actualizar_puntaje(self):
global cantidad_aciertos, cantidad_errados, cantidad_puntos_total
cantidad_aciertos = 0
cantidad_errados = 0
cantidad_puntos_total = 0
def reproducir_sonido_fondo(self):
global sonido_fondo
sonido_fondo = pilas.sonidos.cargar('palabras/audio/AskRufus.wav')
sonido_fondo.reproducir(repetir=True)
def detener_sonido(self):
global sonido_fondo
sonido_fondo.detener()
def crear_palabra_par(self):
self.pilas.actores.Pares()
def eliminar_palabra_par(self, Vampiro, Pares):
global cantidad_aciertos, cantidad_puntos_total #accedemos a la variable global
Pares.eliminar()
self.puntaje.aumentar(10)
cantidad_aciertos += 1
cantidad_puntos_total +=10
def crear_palabra_impar(self):
self.pilas.actores.Impares()
def eliminar_palabra_impar(self, Vampiro, Impares):
global cantidad_errados, cantidad_puntos_total #accedemos a la variable global
Impares.eliminar()
sonido_de_explosion = pilas.sonidos.cargar('sonidos/explosion.wav')
sonido_de_explosion.reproducir()
pilas.camara.vibrar()
self.puntaje.reducir(5)
cantidad_errados += 1
cantidad_puntos_total -= 5
def _crear_boton_volver(self):
pilas.actores.BotonVolver()
Cuando el tiempo llega a cero, necesito que dejen de caer objetos porque si el personaje sigue colisionando con esos objetos el puntaje se sigue modificando. Y he dejado a propósito un tiempo en la escena, una vez que el tiempo llega a cero muetra unos mensajes y a los 5 segundos pasa a otra escena.