Muy buenas!

Trabajando en mi framework, thomas-aquinas, logre dibujar los tiles del escenario usando pytmx (sí quieres saber como se renderiza con SFML, revisa src/scenefactory.py de la rama task-4) para procesar archivos hechos con Tiled.
Sin embargo, tope con un enorme bache, cuando intento cambiar de una escena a otra el programa de prueba se rompe

La primer llamada al método changescene() (de la instancia de Director) funciona de lo más bien (como aparece en la salida del programa), sin embargo, cuando presiono la tecla flecha abajo para cambiar de escenas, el programa falla de forma repentina por una excepción AttributeError, antes de la excepción no aparece ningún mensaje que indique que la escena a cambiado, algo que me deja completamente confundido @_@.
En fin, les dejo la salida de mi programa de prueba:
jorge [~/coders/desarrollo/thomas-aquinas-prueba] ~> python2 main.py
INFO - #34 - __init__: Iniciando una instancia de la clase Conf
DEBUG - #35 - __init__: Cargando la configuración: None...
DEBUG - #180 - joinpaths: Se han de unir las siguientes carpetas ('/home/jorge', '.{game}')
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/.{game}
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/.{game}
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:72: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:4] == '\xFF\xFE\x00\x00':
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:75: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:4] == '\x00\x00\xFE\xFF':
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:78: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:4] == '\xFE\xFF\x00\x00':
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:81: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:4] == '\x00\x00\xFF\xFE':
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:84: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:2] == '\xFF\xFE':
/usr/lib/python2.7/site-packages/chardet/universaldetector.py:87: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif aBuf[:2] == '\xFE\xFF':
DEBUG - #214 - __convertpath: Cadena /home/jorge/.{game} tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #214 - __convertpath: Cadena /home/jorge/.thomas-aquinas-prueba tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #180 - joinpaths: Se han de unir las siguientes carpetas (u'/home/jorge/.thomas-aquinas-prueba', 'gameconf.ini')
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/.thomas-aquinas-prueba/
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/.thomas-aquinas-prueba/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/.thomas-aquinas-prueba/gameconf.ini
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/.thomas-aquinas-prueba/gameconf.ini
DEBUG - #214 - __convertpath: Cadena /home/jorge/.thomas-aquinas-prueba/gameconf.ini tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
INFO - #67 - loadconf: Cargando configuración del juego...
DEBUG - #228 - __convertpath: Hemos recibido una lista
DEBUG - #230 - __convertpath: Iterando la lista...
DEBUG - #232 - __convertpath: Convirtiendo la cadena: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/src/gameconf.ini...
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/src/gameconf.ini tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #234 - __convertpath: Convertido: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/src/gameconf.ini
DEBUG - #232 - __convertpath: Convirtiendo la cadena: /home/jorge/.thomas-aquinas-prueba/gameconf.ini...
DEBUG - #214 - __convertpath: Cadena /home/jorge/.thomas-aquinas-prueba/gameconf.ini tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #234 - __convertpath: Convertido: /home/jorge/.thomas-aquinas-prueba/gameconf.ini
INFO - #72 - loadconf: Configuración del juego cargada de forma exitosa!
INFO - #45 - loadmedia: Buscando por el audiovisual icon.png
DEBUG - #47 - loadmedia: Extensión del audiovisual: .png
DEBUG - #52 - loadmedia: El archivo icon.png es un archivo de imagen
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/ tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #180 - joinpaths: Se han de unir las siguientes carpetas (u'/home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/', 'icon.png')
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data//
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/icon.png
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/icon.png
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/icon.png tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
INFO - #101 - loadimg: Cargado el archivo de imagen /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/icon.png
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/ tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #180 - joinpaths: Se han de unir las siguientes carpetas (u'/home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/', 'maps', 'tmx/mapa de prueba isometrico.tmx')
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data//
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tmx/mapa de prueba isometrico.tmx
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tmx/mapa de prueba isometrico.tmx
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tmx/mapa de prueba isometrico.tmx tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
INFO - #70 - loadmap: Cargando las baldosas del escenario...
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/ tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
DEBUG - #180 - joinpaths: Se han de unir las siguientes carpetas (u'/home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/', 'maps/tilesets/baldosas isometricas de prueba.png')
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data//
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/
DEBUG - #189 - joinpaths: Resultado hasta el momento: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tilesets/baldosas isometricas de prueba.png
DEBUG - #193 - joinpaths: Retornando el resultado de la operación: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tilesets/baldosas isometricas de prueba.png
DEBUG - #214 - __convertpath: Cadena /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tilesets/baldosas isometricas de prueba.png tiene codificación 'ascii'
DEBUG - #221 - __convertpath: No hay nada que convertir, no estamos en Windows
INFO - #101 - loadimg: Cargado el archivo de imagen /home/jorge/coders/desarrollo/thomas-aquinas-prueba/data/maps/tilesets/baldosas isometricas de prueba.png
DEBUG - #131 - loadmap: gid: 1, flag: 0
DEBUG - #131 - loadmap: gid: 4, flag: 0
DEBUG - #131 - loadmap: gid: 2, flag: 0
DEBUG - #131 - loadmap: gid: 3, flag: 0
DEBUG - #131 - loadmap: gid: 5, flag: 0
DEBUG - #131 - loadmap: gid: 6, flag: 0
INFO - #134 - loadmap: Carga de baldosas exitosa!
INFO - #155 - changescene: Cambiando de escena: <Scene: HelloWorld, file: /home/jorge/coders/desarrollo/thomas-aquinas-prueba/src/scenes/escena_1.py>
Traceback (most recent call last):
File "main.py", line 9, in <module>
director.loop()
File "/home/jorge/coders/desarrollo/thomas-aquinas-prueba/src/scenemanager.py", line 118, in loop
type(self.__actualscene)))
src.scenemanager.TAAttrIsNotScene: Objeto <type 'instance'> no es instancia de SceneFactory
Sé que mi programa de prueba no les va a correr, pero aquí le dejos el código fuente de susodicho programa:
main.py:
# encoding: utf-8
from src import common
from src import scenemanager
from src.scenes import escena_1
director = scenemanager.Director("icon.png")
holamundo_1 = escena_1.Helloworld(director)
director.changescene(holamundo_1)
director.loop()
escena_1.py:
# encoding: utf-8
from src.scenefactory import AbstractScene
import sfml
from src import common
import escena_2
class Helloworld(AbstractScene):
def __init__(self, scenemanager):
AbstractScene.__init__(self, scenemanager)
self.__tipografia = sfml.Font.get_default_font()
self.texto = sfml.Text(self.__str__())
self.texto.font = self.__tipografia
self.texto.character_size = 10
self.texto.style = sfml.Text.BOLD
self.texto.color = sfml.Color.WHITE
self.loadmap("tmx/mapa de prueba isometrico.tmx")
def on_event(self, event):
if type(event) is sfml.KeyEvent and event.pressed:
if event.code == common.settings.getcontrollerbutton("down_button"):
self.irescena2()
def on_update(self):
pass
def on_draw(self, window):
self.drawmap()
window.draw(self.texto)
def irescena2(self):
escena = escena_2.HelloWorld(self.scenemanager)
self.scenemanager.changescene(escena)
def __str__(self):
return "<Scene: HelloWorld, file: {0}>".format(__file__)
escena_2.py:
# encoding: utf-8
from src.scenefactory import AbstractScene
import sfml
from src import common
import escena_1
class Helloworld(AbstractScene):
def __init__(self, scenemanager):
AbstractScene.__init__(self, scenemanager)
self.__tipografia = sfml.Font.get_default_font()
self.texto = sfml.Text(self.__str__())
self.texto.font = self.__tipografia
self.texto.character_size = 10
self.texto.style = sfml.Text.BOLD
self.texto.color = sfml.Color.WHITE
self.loadmap("tmx/mapa prueba.tmx")
def on_event(self, event):
if type(event) is sfml.KeyEvent and event.pressed:
if event.code == common.settings.getcontrollerbutton("up_button"):
self.irescena1()
def on_update(self):
pass
def on_draw(self, window):
self.drawmap()
window.draw(self.texto)
def irescena1(self):
escena = escena_1.HelloWorld(self.scenemanager)
self.scenemanager.changescene(escena)
def __str__(self):
return "<Scene: HelloWorld, file: {0}>".format(__file__)
Para ver el modulo scenemanager y scenefactory sólo visiten el repositorio del proyecto, rama task-4.
Gracias por la posible ayuda y un saludo!
