Hola, como están? Tuve un problema al incorporar escenas y menú a un juego. El juego es simple, un personaje debe atrapar diferentes palabras que caen desde arriba. Y ahí es donde me apareció el inconveniente. Las imágenes que caen están en una lista y usando un método random, éste las va eligiendo, se cargan y se van creando una cada 3 segundos, y colisionan con el personaje cada vez que las atrapa. (Ésto funcionaba hasta que agregué menú y escenas).
El código es el siguiente:
# coding: utf-8
import pilasengine
pilas = pilasengine.iniciar()
class EscenaMenu(pilasengine.escenas.Escena):
def iniciar(self):
self.pilas.fondos.Fondo("palabras/indicador.png")
self.pilas.actores.Menu(
[
('Iniciar Juego', self.iniciar_juego),
('Salir', self.salir_del_juego),
])
def iniciar_juego(self):
self.pilas.escenas.EscenaJuego()
def salir_del_juego(self):
print("Tengo que salir...")
pilas.terminar()
class Personaje(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = pilas.imagenes.cargar_animacion("palabras/personaje.png", 2)
self.y = -150
self.escala = 0.7
self.radio_de_colision = 30
.
#resto de metodos
class Palabra(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._elegir_imagen_y_sonido()
def actualizar(self):
self.y -= self.velocidad
def eliminar(self):
self._reproducir_sonido()
# Se invoca la destruccion del actor.
pilasengine.actores.Actor.eliminar(self)
def _reproducir_sonido(self):
self.sonido.reproducir()
def _elegir_imagen_y_sonido(self):
imagenes = ['palabras/abuela2.png', 'palabras/andador1.png', 'palabras/atuela1.png', 'palabras/cafetera4.png', 'palabras/camiseta5.png']
sonidos = ['sonidos/a1.wav', 'sonidos/explosion.wav', 'sonidos/explosion.wav', 'sonidos/explosion.wav', 'sonidos/e1.wav']
cantidad = len(imagenes)
indice = self.pilas.azar(0, cantidad - 1)
# cargamos la imagen y el sonido al azar
self.imagen = imagenes[indice]
self.sonido = self.pilas.sonidos.cargar(sonidos[indice])
def eliminar_palabra(Personaje, Palabra):
Palabra.eliminar()
# Definimos las colisiones, pero usando 'etiquetas'
pilas.colisiones.agregar('Personaje', 'Palabra', eliminar_palabra)
# Gener una imagen (letra) cada 3 segundos
def crear_palabra():
pilas.actores.Palabra()
pilas.tareas.siempre(3, crear_palabra)
class EscenaJuego(pilasengine.escenas.Escena):
def iniciar(self):
self.pilas.fondos.Fondo("palabras/fondo.png")
self.pilas.actores.Personaje()
self.pilas.actores.Palabra()
self.pilas.actores.Sonido()
self.puntaje = pilas.actores.Puntaje(280, 200, color="blanco")
# Vinculamos las escenas
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.vincular(EscenaJuego)
# Vinculamos los actores Personalizados
pilas.actores.vincular(Personaje)
pilas.actores.vincular(Palabra)
pilas.escenas.EscenaMenu()
pilas.ejecutar()
Uno de los problemas, es que ya no me genera mas el actor “palabra” que son las imágenes random que caen desde arriba. Y solo crea una imagen y ni si quiera hay colisión.
Si alguien puede ver el error o decirme que puedo modificar, les agradezco.
Saludos!!