Problema actores personalizados

Lo que yo necesito es crear Actores con nombres randoms y imagenes randoms de la carpeta imagenes que esta en el mismo directorio que el script actor.py
El problema q tengo es que cuando quiero instanciar un objeto de mi clase no le puedo pasar por parametros mis variables (nombre e imagen random)

import pilasengine, random, os

class Actor_Pelicula(pilasengine.actores.Actor):
    def iniciar(self, nombre):
        self.imagen = 'imagen.jpg'
        self.nombre = nombre

personaje = Actor_Pelicula(pilas, nombre='juan') # esta es la forma en la que puedo instanciar un objeto Actor_Pelicula
nombre = 'juan'
personaje = Actor_Pelicula(pilas, nombre) # ERROR

× # Exception: El parametro x tiene un valor no permitido: juan
× #
× # Traza del error (las llamadas mas recientes al final):
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/interprete/editor.py”,linea 646, en ejecutar
× # exec(contenido, self.interpreterLocals)
× # Archivo actual,linea 16, en
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/actor.py”,linea 142, en init
× # pilas.actores.agregar_actor(self)
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/init.py”,linea 138, en agregar_actor
× # actor.pre_iniciar(*k, **kv)
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/actor.py”,linea 152, en pre_iniciar
× # raise Exception(mensaje)
× # Exception: El parametro x tiene un valor no permitido: juan
× #

pero yo lo que quiero es instanciar un Actor_Pelicula compretamente random… osea imagen y nombre

class Actor_Pelicula(pilasengine.actores.Actor):
    def iniciar(self, nombre, imagen):
        self.imagen = imagen
        self.nombre = "CARLOS"

imagen_random =  random.choice(os.listdir('imagenes/'))
personaje = Actor_Pelicula(pilas,imagen_random) #ERROR
personaje2 = Actor_Pelicula(pilas, imagen='imagen.jpg') #ERROR

»
× # Exception: El parametro x tiene un valor no permitido: imagenes/jaguar-300px.png
× #
× # Traza del error (las llamadas mas recientes al final):
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/interprete/editor.py”,linea 646, en ejecutar
× # exec(contenido, self.interpreterLocals)
× # Archivo actual,linea 17, en
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/actor.py”,linea 142, en init
× # pilas.actores.agregar_actor(self)
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/init.py”,linea 138, en agregar_actor
× # actor.pre_iniciar(*k, **kv)
× # Archivo “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/pilasengine/actores/actor.py”,linea 152, en pre_iniciar
× # raise Exception(mensaje)
× # Exception: El parametro x tiene un valor no permitido: imagenes/jaguar-300px.png
× #

Buenas, @slowned !

No puedo probar el código, pero creo que la solución seria hacer una lista con nombres entre los cuales sacar un nombre al azar. Tambien es aconsejable que si la def iniciar tiene 2 parametros le pases los dos, tanto el nombre como la imagen. Por último, yo VINCULARIA el actor personalizado para no tener que estar declarando Pilas en cada inicialización…

class Actor_Pelicula(pilasengine.actores.Actor):
    def iniciar(self, nom, imag):
        self.imagen = imag
        self.nombre = nom

pilas.actores.vincular(Actor_Pelicula) #VINCULAMOS EL ACTOR PERSONALIZADO

imagen_random =  random.choice(os.listdir('imagenes/'))

lista_nombres = ['Juan','Pedro','Antonia','Pilar']

nombre_random = random.choice(lista_nombres)

personaje = pilas.actores.Actor_Pelicula(nom = nombre_random, imag = imagen_random)
pilas.avisar(personaje.nombre)

Prueba a partir de esto y cuentanos como te fué, ok?

Un saludo :wink:

import pilasengine
import os 
import random

pilas = pilasengine.iniciar()

class ActorPelicula(pilasengine.actores.Actor):

    def iniciar(self, nombre):
	self.imagen = pilas.imagenes.cargar('imagenes/'+random.choice(os.listdir('imagenes/')))
#	self.imagen = imagen# if imagen else "imagenes/ribbit7-300px.png"
	self.nombre = nombre
	self.x=30
	self.y=-110

        self.decir('Hola, me llamo '+ self.nombre)


#ri = random.choice(os.listdir('imagenes/'))
#image = pilas.imagenes.cargar('imagenes/'+ri)

list_name = ['Juan','Pedro','Antonia','Pilar']
name = random.choice(list_name)

character = ActorPelicula(pilas, nombre=name)

pilas.ejecutar()

asi me quedo el codigo y anda de maravilla

2 Likes