Colisiones dentro de escena

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()