Buenas…
Estoy creando un juego para la universidad y necesito ayuda para crear colisiones dentro de una escena
y para que cuando recoja todos los objetos cambie de escena… eh tratado de todo pero cada vez que creo la colisión no me la reconoce y me sale error de sintaxis… Ayuda!!
Buenas, yo no soy ningun experto mas bien un novato como tu… a mi me pasaba algo parecido y era por no haber puesto los nombres de los actores en colision entre comillas. por ejemplo (“mono”,“platano”, funcion_que_hara_cuando_colisionen)
De todas formas seria buena idea copiar aqui el codigo para que alguien que entienda más que yo te pueda decir en donde te equivocaste…
Saludos.
import pilasengine
pilas = pilasengine.iniciar(alto=450,ancho=800)
#Inicio del Juego
class EscenaMenu(pilasengine.escenas.Escena):
def iniciar(self):
self.pilas.fondos.Fondo("imagenes/fondo.png")
actor_texto = self.pilas.actores.Actor()
actor_texto.imagen = "imagenes/click.png"
self._aplicar_animacion(actor_texto)
self.pilas.eventos.pulsa_tecla.conectar(self._iniciar_el_juego)
self._crear_el_titulo_del_juego()
def _aplicar_animacion(self, texto):
texto.y = -500
texto.escala = 4
texto.escala = [1],1.5
texto.y = [-100],1
def _iniciar_el_juego(self,evento):
self.pilas.escenas.EscenaJuego1()
def _crear_el_titulo_del_juego(self):
titulo = self.pilas.actores.Actor()
titulo.imagen = "imagenes/titulo.png"
titulo.y = 300
titulo.rotacion = 30
titulo.y = [100],1
titulo.rotacion = [0],1.2
#boton para regresar
class BotonVolver(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "imagenes/inicio.png"
self.cuando_hace_click = self._volver_a_la_escena_inicial
self.y = 380
self.y = [210]
self.x = -370
self.escala = 0.5
def _volver_a_la_escena_inicial(self, evento):
self.pilas.escenas.EscenaMenu()
class Diamante(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "imagenes/diamond.gif"
#creacion de protagonista
class Protagonista(pilasengine.actores.Actor):
def iniciar(self):
animacion = pilas.imagenes.cargar_animacion("imagenes/hero_spritesheet.png",13)
self.imagen = animacion
self.figura = pilas.fisica.Rectangulo(self.x, self.y, 25,30,
friccion=0, restitucion=0)
self.figura.x = -300
self.figura.y = 30
animacion.definir_animacion('parado',[0,1],0.8)
animacion.definir_animacion('salto',[0,9,0],1)
animacion.definir_animacion('caminar',[2,3,4,5,6,7,8],5)
self.imagen.cargar_animacion('parado')
self.figura.sin_rotacion = True
self.figura.escala_de_gravedad = 2
def actualizar(self):
self.imagen.avanzar()
velocidad = 8
salto = 7
self.x = self.figura.x
self.y = self.figura.y
if self.pilas.control.derecha:
self.figura.velocidad_x = velocidad
self.direccion = 1
self.imagen.cargar_animacion('caminar')
self.espejado = False
elif self.pilas.control.izquierda:
self.figura.velocidad_x = -velocidad
self.direccion = -1
self.imagen.cargar_animacion('caminar')
self.espejado = True
else:
self.figura.velocidad_x = 0
self.imagen.cargar_animacion('parado')
if self.pilas.control.arriba and int(self.figura.velocidad_y) <= 0:
self.imagen.cargar_animacion('salto')
self.figura.impulsar(0, salto)
#Mapas del juego
class EscenaJuego1(pilasengine.escenas.Escena):
def iniciar(self):
mapa1 = pilas.actores.MapaTiled("mapa1.tmx",densidad=0,
restitucion=0, friccion=0, amortiguacion=0)
self.Actor = mapa1
self._crear_boton_volver()
self._crear_protagonista()
self._crear_diamante()
self.puntaje = pilas.actores.Puntaje(0, 200, color="blanco")
def _crear_boton_volver(self):
pilas.actores.BotonVolver()
def _crear_protagonista(self):
mi_actor = pilas.actores.Protagonista()
mi_actor.escala = 0.5
def _crear_diamante(self):
diamante1 = pilas.actores.Diamante()
diamante2 = pilas.actores.Diamante()
diamante3 = pilas.actores.Diamante()
diamante4 = pilas.actores.Diamante()
diamante1.x = -300
diamante1.y = 160
diamante2.x = 220
diamante2.y = 200
diamante3.x = -370
diamante3.y = -140
diamante4.x = 370
diamante4.y = -70
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.vincular(EscenaJuego1)
pilas.escenas.EscenaMenu()
pilas.actores.vincular(BotonVolver)
pilas.actores.vincular(Protagonista)
pilas.actores.vincular(Diamante)
pilas.ejecutar()
esto es todo lo que ya tengo hecho y solo me faltaría lo de las colisiones…
Buenas de nuevo,
Yo creo que tu sabes bastante mas que yo, pero aun asi te dire lo que me parece que te falta:
En la class Escena1, en def iniciar(self): añades las colisiones
pilas.colisiones.agregar(‘Diamante’, 'mi_actor ', self.funcion a realizar si hay colision)
fijate bien que los actores estan escritos entre comillas.
No veo la funcion def que quieres que suceda cuando haya colision, supongo que querras que el diamante desaparezca o algo asi, deberias tenerla ya escrita en la EscenaJuego1
Dentro de class EscenaJuego1 te faltaria la funcion para cambiar de mapa. Tambien te falta crear la class EscenaJuego2 y vincularla.
Si vas a hacer muchos niveles quizas te interese más hacer un Escenas_Juego.py del que luego importes las escenas. Lo digo por no hacer tan largo este codigo.
Espero haberte sido de utilidad, y no solo explicarte cosas que ya sabias.
Aunque no has contestado si te sirvió, y quizás ya lo hayas solucionado por ti mismo, te pongo un ejemplo de colisiones dentro de una escena. Espero que te sirva para guiarte, o para otros con el mismo problema.
import pilasengine
pilas = pilasengine.iniciar(titulo="ESCAPE",ancho=1200,alto=480)
class PuertaCerrada(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = ('imatges/portatancada.jpg')
self.y=-80
self.z=10
class Herramientas(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = ('imatges/eines.png')
self.x=200
self.y=100
self.aprender('arrastrable')
self.escala=0.3
self.z=1
class Cajon(pilasengine.actores.Actor):
def iniciar(self):
self.imagen= ('imatges/caja.png')
self.x=-500
self.y=-180
self.z=2
self.escala=3
self.aprender('puedeexplotarconhumo')
class LlaveRoja(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = ('imatges/clauvermella.png')
self.x=-300
self.y=-80
self.z=1
self.rotacion=[360],2
self.escala=[0.2,1,0.2],1.5
self.aprender('arrastrable')
class ParedNorte(pilasengine.escenas.Escena):
def iniciar(self):
self.pilas.fondos.FondoMozaico('imatges/azul.png')
self.pilas.actores.PuertaCerrada()
self.pilas.actores.Herramientas()
self.pilas.actores.Cajon()
pilas.colisiones.agregar('Herramientas','Cajon',self.romper_caja) #Primera colision
pilas.colisiones.agregar('LlaveRoja', 'PuertaCerrada', self.abrir_puerta) #Segunda colision
def crear_llave(self):
self.pilas.actores.LlaveRoja()
pilas.avisar("Al fin... la llave!!!")
def romper_caja(self, cajon,herramientas): #primera colision
herramientas.eliminar()
cajon.eliminar()
self.crear_llave()
def abrir_puerta(self, llave, puerta): #segunda colision
llave.eliminar()
puerta.eliminar()
pilas.actores.vincular(PuertaCerrada)
pilas.actores.vincular(Herramientas)
pilas.actores.vincular(Cajon)
pilas.actores.vincular(LlaveRoja)
pilas.escenas.vincular(ParedNorte)
pilas.escenas.ParedNorte()
pilas.ejecutar()