Utilizar una clase propia

Hola. Soy nuevo en Pilas y en Python, cree una clase heredando los métodos de la clase actor y la guarde dentro de un archivo llamado prueba1.py, luego quiero utilizar esa clase instanciandola desde otro archivo, llamado prueba2.py, funciona, pero cuando quiero ejecutar el juego abriendo en el interprete el archivo prueba2 me dice que no reconoce la clase creada en prueba1, solo funciona si ejecuto primero el archivo prueba1… Paso el código que esta en prueba1 y en prueba2.

Gracias.

prueba2:

import pilasengine
import prueba1
pilas = pilasengine.iniciar()
pilas.fondos.Cesped()
g = woody(pilas)
pilas.ejecutar()

prueba1:

import pilasengine
pilas = pilasengine.iniciar()

class woody(pilasengine.actores.Actor):   
    
    def iniciar(self):
        self.imagen = "data/edmodo.png"

    def saludar(self):
        self.decir("Hola soy Woody!!!")

    def dar_vuelta(self):
        self.rotacion = [360]

    def actualizar(self):
        if pilas.escena_actual().control.izquierda:
            self.x -= 5
            self.espejado = True
        elif pilas.escena_actual().control.derecha:
            self.x += 5
            self.espejado = False
        if pilas.escena_actual().control.arriba:
            self.y += 1
            self.transparencia = 50

Buenas, que tal,
Siento decirte que no tengo los conocimientos para responder tu pregunta, pero viendo que nadie te responde me he permitido la libertad de ofrecerte algún consejo que creo, humildemente, te podrian ser útiles:
Lo primero… realmente necesitas modulizar tu juego en varios ficheros? si realmente tienes tan poca experiencia yo te diria que empieces por el 1 antes de probar el 7. Quiero decir que modulizar está bien pero ya se necesitan unos conocimientos sólidos para realizarlo. Tantos actores vas a crear? Tan complicado va a ser tu primer juego? Si la respuesta es NO simplemente haz tu juego en un solo fichero, y ya más adelante, cuando domines más Python y Pilas ya lo modulizarás. Piensa que con Pilas se puede crear un buen juego en relativamente pocas líneas de código sin necesidad de usar esos recursos avanzados.
Lo segundo… Acostúmbrate a las “buenas prácticas”: nombra tus “class” con Mayúscula inicial, y llama “Woody” a tu actor en vez de “woody” para diferenciar cuando estás llamando a una variable y cuando a una clase. Cuando definas una variable no le pongas de nombre “g” porque eso te va a dar problemas seguro. Usa algo más fácil de manejar y recordar, tipo “woody=pilas.actores.Woody()”
Lo tercero… tendrás que vincular los actores que crees con “pilas.actores.vincular(Nombre DeTuActor)” o te dará error . Mira en los ejemplos que trae pilas. (Lo mismo para las escenas que crees).
Lo cuarto… Pilas te ofrece muchos actores ya creados que no tienes ni que definir ni vincular. Por ejemplo, para este caso tuyo, yo crearia un Pingu, y despues le cambiaria la imagen:
woody=pilas.actores.Pingu()
woody.imagen=“data/edmodo.png”
Con esto consigues un personaje que se mueve y salta y tiene la imagen que tu quieres. A veces la solución es más sencilla de lo que parece, pero por desconocimiento nos complicamos la vida buscando cosas raras.

Espero no haber sido pesado, y si lo he sido piensa que fué con la mejor intención. :blush:

1 Like

¡ Hola @papazoglu!,

Ahí modifiqué los archivos, te comento más abajo los cambios que hice:

prueba2.py

import pilasengine
import prueba1

pilas = pilasengine.iniciar()
pilas.fondos.Cesped()

g = prueba1.woody(pilas)

# O bien, en lugar de lo anterior:
# pilas.actores.registrar(prueba1.woody)
# g = pilas.actores.woody()

pilas.ejecutar()

prueba1.py

import pilasengine

class woody(pilasengine.actores.Actor):

    def iniciar(self):
        self.imagen = "data/edmodo.png"

    def saludar(self):
        self.decir("Hola soy Woody!!!")

    def dar_vuelta(self):
        self.rotacion = [360]

    def actualizar(self):

        # Ojo, para acceder a pilas usar self.pilas

        if self.pilas.escena_actual().control.izquierda:
            self.x -= 5
            self.espejado = True
        elif self.pilas.escena_actual().control.derecha:
            self.x += 5
            self.espejado = False
        if self.pilas.escena_actual().control.arriba:
            self.y += 1
            self.transparencia = 50

El cambio más importante es inicializar pilas una sola vez, por ejemplo en el archivo prueba2.py.
Luego, para acceder a la instancia “pilas” dentro de una clase podrías usar “self.pilas”.

Creo que esos son los únicos cambios que realicé.

¡Avisanos cualquier cosa!

1 Like

Muchas gracias Jordi por las recomendaciones lo voy a tener en cuenta…
Gracias Hugo, ahora lo voy a probar y les comento como me fue…

Muchas gracias!

1 Like