Como hago una plataforma y le agrego fisicas a mis actores?

Hola, estuve intentandando hacer un sistema de fisicas, mas bien, de gravedad, pero en un punto deja de funcionar y la gravedad deja de funcionar, si alguien me ayuda o me dice un mejor metodo me estaria ayudando bastante!

Aqui tienen lo que he hecho:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

class Robot(pilasengine.actores.Actor):
    def iniciar(self):
        teclas1 = {pilas.simbolos.IZQUIERDA:'izquierda',pilas.simbolos.DERECHA:'derecha'}
        self.control1 = pilas.control.Control(teclas1)
        self.imagen = pilas.imagenes.cargar('Robot.png')
        self.escala = 0.2
        self.y = 50
        self.asd=True
        self.aprender(pilas.habilidades.MoverseConElTeclado, control=self.control1)
        self.figura_de_colision = self.pilas.fisica.Rectangulo(ancho=20,
            alto=38, dinamica=False, amortiguacion=0,
            restitucion=0, friccion=10, densidad=0)
    def actualizar(self):
        if self.asd:
            self.y -= 1#3.4

class Plataforma(pilasengine.actores.Actor):
    def iniciar(self):
        self.imagen = pilas.imagenes.cargar("C:\pilastrabajos\lupilas\Imagenes\efond.jpg")
        self.escala = 0.04
        self.y = -130
        
class Plataforma2(pilasengine.actores.Actor):
    def iniciar(self):
        self.imagen = pilas.imagenes.cargar("C:\pilastrabajos\lupilas\Imagenes\efond.jpg")
        self.escala = 0.5
        self.y = -360

class Escena(pilasengine.escenas.Escena):
    def iniciar(self):
        self.fondo = pilas.fondos.Galaxia()
        self.p1 = pilas.actores.Plataforma()
        self.p12 = pilas.actores.Plataforma2()
        self.pro = pilas.actores.Robot()
        self.pilas.colisiones.agregar('Plataforma','Robot',self.asd2)
        pilas.eventos.pulsa_tecla.conectar(self.al_pulsar_tecla)
    def asd2(self, Plataforma, Robot):
        self.pro.asd=False
    def al_pulsar_tecla(self, tecla):
        if tecla.codigo=="g":
         #saltar
            self.pro.y +=20
        
pilas.actores.vincular(Plataforma)
pilas.actores.vincular(Plataforma2)
pilas.actores.vincular(Robot)
pilas.escenas.vincular(Escena)
pilas.escenas.Escena()
pilas.ejecutar()

Buenas, @Pan!

Para empezar debo decirte que la física no es mi fuerte… :smile:

Aún así, he visto algún error básico en tu código.

def actualizar(self):
        if self.asd:
            self.y -= 1#3.4 

Como ves en la def actualizar del actor tienes esa condición IF, por lo que el actor SOLO disminuirá en el eje Y si se cumple como True.

Pero en el siguiente código

le cambias el valor booleano a False. Esto provoca que una vez ha colisionado asd cambia a False y por tanto el IF de la def actualizar ya no se cumple.

Un par de “cosillas” más que veo en tu código:

Podrías cambiar esto:

def asd2(self, Plataforma, Robot):
    self.pro.asd=False

por esto:

def asd2(self, Plataforma, Robot):
    Robot.asd=False

Y esto:
self.aprender(pilas.habilidades.MoverseConElTeclado, control=self etc…

por esto:
self.aprender(‘MoverseConElTeclado’, control=self etc…

Un saludo! :wink:

1 me gusta