Posible Bug al asignar imagen a un actor

Si tienes alguna duda sobre cómo usar pilas, o tienes problemas para instalar o hacer algo en pilas comentalo aquí.

Posible Bug al asignar imagen a un actor

Notapor kerveros » Mié Jun 01, 2011 1:41 am

Hola a todos.
Este posible bug ocurre cuando se quiere crear un actor de la siguiente manera:
Código: Seleccionar todo
import pilas
pilas.iniciar()
eje = pilas.actores.Ejes() #linea para mostrar el plano cartesiano
nave = pilas.actores.Actor()
imagen_nave = pilas.imagenes.cargar("ruta_de_su_imagen")
nave.imagen = imagen_nave


En teoría esto debería posicionar el actor con su imagen en el centro del plano cartesiano, pero no.
Cuando se crea un actor asi:
Código: Seleccionar todo
nave = pilas.actores.Actor("ruta_de_su_imagen")

funciona perfectamente, comentenme si a ustedes también les ocurre o es solo a mi.
kerveros
 
Mensajes: 7
Registrado: Lun May 30, 2011 12:01 am

Re: Posible Bug al asignar imagen a un actor

Notapor pchack » Mié Jun 01, 2011 4:05 am

Que tal kerveros!,

Este problema ocurre debido a que cuando creas un actor sin argumentos:
nave = pilas.actores.Actor()

por defecto se inicializa la imagen siguiente:
sin_imagen.png


Y el centro se establece para esta imagen por lo que al cambiar la imagen sigue teniendo el mismo centro esto se corrige agregando lo siguiente:

nave.centro = ("centro", "centro")


Lo que hace definir el centro del actor respecto a las proporciones de la nueva imagen.

código completo corregido:

import pilas
pilas.iniciar()
eje = pilas.actores.Ejes() #linea para mostrar el plano cartesiano
nave = pilas.actores.Actor()

imagen_nave = pilas.imagenes.cargar("ruta_imagen.extension")
nave.imagen = imagen_nave

nave.centro = ("centro", "centro")

pilas.ejecutar()


Eso es, espero que sirva la explicación.

Saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: Posible Bug al asignar imagen a un actor

Notapor kerveros » Mié Jun 01, 2011 4:48 am

Mil gracias, claro que me sirvió tu explicación, deberíamos proponer a Hugo la ejecución de esa función automáticamente al momento de definir una nueva imagen para un actor.

Nuevamente mil gracias

pchack escribió:Que tal kerveros!,

Este problema ocurre debido a que cuando creas un actor sin argumentos:
nave = pilas.actores.Actor()

por defecto se inicializa la imagen siguiente:
sin_imagen.png


Y el centro se establece para esta imagen por lo que al cambiar la imagen sigue teniendo el mismo centro esto se corrige agregando lo siguiente:

nave.centro = ("centro", "centro")


Lo que hace definir el centro del actor respecto a las proporciones de la nueva imagen.

código completo corregido:

import pilas
pilas.iniciar()
eje = pilas.actores.Ejes() #linea para mostrar el plano cartesiano
nave = pilas.actores.Actor()

imagen_nave = pilas.imagenes.cargar("ruta_imagen.extension")
nave.imagen = imagen_nave

nave.centro = ("centro", "centro")

pilas.ejecutar()


Eso es, espero que sirva la explicación.

Saludos.
kerveros
 
Mensajes: 7
Registrado: Lun May 30, 2011 12:01 am

Re: Posible Bug al asignar imagen a un actor

Notapor pchack » Mié Jun 01, 2011 1:32 pm

Creo que si se podria hacer lo que tu dices pero no creo que sea necesario. En pilas tu puedes crear un actor con una imagen que tu decidas de la siguiente forma:

import pilas
pilas.iniciar()

imagen = pilas.imagenes.cargar("ruta_imagen")
actor = pilas.actores.Actor(imagen)

pilas.ejecutar()



Esta forma es la más común de crear un actor nuevo con imagen personalizada, en este caso el centro se configura automático.

Saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: Posible Bug al asignar imagen a un actor

Notapor kerveros » Mié Jun 01, 2011 3:22 pm

el problema surge cuando quieres hacer actores en grupo asi:

def creaobjetos():
## Klingon Bird Of Prey ##
kbop = pilas.atajos.fabricar(pilas.actores.Actor, 15)
for i in range(15):
kbop[i].imagen = "imagenes/bop.png"
kbop[i].centro = ("centro","centro")


si lo creas asi no puedes definirle la imagen en la creación del grupo, cuando lo intente me genero un error, por que fabricar, no acepta métodos, solo objetos.

pchack escribió:Creo que si se podria hacer lo que tu dices pero no creo que sea necesario. En pilas tu puedes crear un actor con una imagen que tu decidas de la siguiente forma:

import pilas
pilas.iniciar()

imagen = pilas.imagenes.cargar("ruta_imagen")
actor = pilas.actores.Actor(imagen)

pilas.ejecutar()



Esta forma es la más común de crear un actor nuevo con imagen personalizada, en este caso el centro se configura automático.

Saludos.
kerveros
 
Mensajes: 7
Registrado: Lun May 30, 2011 12:01 am

Re: Posible Bug al asignar imagen a un actor

Notapor pchack » Mié Jun 01, 2011 4:08 pm

Existen varias formas de hacer lo que dices, explicare 2:
La primera es entregándole un argumento a la función fabricar y la segunda es creando una clase personalizada de Actor.

Explico la primer:
Cuando llamas al método pilas.atajos.fabricar(pilas.actores.Actor, 15) tu puedes entregarle un argumento para que este sea entregado al metodo __init__ de la clase Actor que a su vez carga la imagen.

grupo = pilas.atajos.fabricar(pilas.actores.Actor, 15, imagen = "ruta_imagen")

El argumeno imagen se entrega a la clase Actor y es como decir:
pilas.actores.Actor(imagen = "ruta_imagen")


Y quedaría solucionado.

La segunda forma es crear un actor persolanizado y se hace así:

import pilas
from pilas.actores import Actor

pilas.iniciar()

class actor_personalizado(Actor):
def __init__(self, x = 0, y = 0):
imagen = pilas.imagenes.cargar('ruta_imagen')
Actor.__init__(self, imagen, x=x, y=y)


grupo = pilas.atajos.fabricar(actor_personalizado, 15)



pilas.ejecutar()


Eso seria, Saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: Posible Bug al asignar imagen a un actor

Notapor kerveros » Mié Jun 01, 2011 4:28 pm

Nuevamente Gracias.
Aplicare el método de la clase.

nuevamente mil gracias.

pchack escribió:Existen varias formas de hacer lo que dices, explicare 2:
La primera es entregándole un argumento a la función fabricar y la segunda es creando una clase personalizada de Actor.

Explico la primer:
Cuando llamas al método pilas.atajos.fabricar(pilas.actores.Actor, 15) tu puedes entregarle un argumento para que este sea entregado al metodo __init__ de la clase Actor que a su vez carga la imagen.

grupo = pilas.atajos.fabricar(pilas.actores.Actor, 15, imagen = "ruta_imagen")

El argumeno imagen se entrega a la clase Actor y es como decir:
pilas.actores.Actor(imagen = "ruta_imagen")


Y quedaría solucionado.

La segunda forma es crear un actor persolanizado y se hace así:

import pilas
from pilas.actores import Actor

pilas.iniciar()

class actor_personalizado(Actor):
def __init__(self, x = 0, y = 0):
imagen = pilas.imagenes.cargar('ruta_imagen')
Actor.__init__(self, imagen, x=x, y=y)


grupo = pilas.atajos.fabricar(actor_personalizado, 15)



pilas.ejecutar()


Eso seria, Saludos.
kerveros
 
Mensajes: 7
Registrado: Lun May 30, 2011 12:01 am


Volver a Consultas, problemas o bugs.

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado