Tutorial para modulizar? [SOLUCIONADO]

Buenas de nuevo…

Estoy metido de lleno en la realización de mi tercer juego, y dada su magnitud (quizás quise abarcar demasiado?) me surge la necesidad (ahora sí) de modulizar.

Lo he hecho con éxito con mi class Actor Globo2, y con los archivos de texto de los diálogos. Ya sólo me falta modulizar las escenas, y ahí me ha venido el problema: NO SÉ COMO HACERLO. He buscado por todo el foro y por Google, sin éxito. He probado todas las combinaciones que se me han ocurrido, y nada parece funcionar.

Me podrian indicar algún tutorial donde se explique esto? O una pequeña aclaración… Lo único que necesito realmente es saber como llamar a mi Escena (en otro archivo) desde el archivo principal del juego. Otra cuestión sobre este tema, ¿Es de suponer que si el fichero está en una sub-carpeta, habria que incluir en esa carpeta un init.py ?

Una segunda cuestión es si hay alguna manera de realizar una serie de tareas “en cadena” (parecido a “Dialogo” pero con acciones de los actores). Me refiero a que si pongo mono.reir() y mono.gritar() las 2 acciones se realizan al mismo tiempo. Se podria hacer de alguna manera que no fuera crear una pilas.tarea.agregar() y una def accion(): para cada acción y que estas se fueran sucediendoo una tras de otra en el espacio de tiempo que se le asignen? No sé si estoy pidiendo demasiado, pero me vendria muy bien algo así!!!

Desde ya muchas gracias.

Hola Jordinur ,

con respecto a tener modularizado el juego podes tomar como base el ejemplo que se llama “juego con escenas” que viene con pilas y sino fijate este juego que estoy haciendo que tiene todas las escenas separadas GitHub - ElitaTnk/monkyPingui: Mini video juego sobre Monky y Pingui, basado en PilasEngine

La segunda pregunta no la entiendo bien pero por ahi algo de mi juego te sirva, sino volvé a preguntar porfa :smiley:

Saludos!

Hola, @ElitaTnk !

Muchas gracias por responder.

Tu juego me ha servido de mucho, y he podido crear un ejemplo muy simple de llamada a una escena desde otro fichero que funciona bien. El problema viene cuando intento aplicar ese ejemplo simple a mi juego, que empieza a darme errores.

Pero eso ya debe ser por problemas de mi código, al que le deben faltar algun tipo de “parametros”. El hecho es que si esa escena la pongo en el principal del programa funciona de maravilla, pero cuando la modulizo y la llamo da varios errores. Uno de ellos es que no me reconoce “pilas”. Si la llamo haciendo pilas.escenas.MiEscena(pilas) ya no da ese error, pero me salen errores de codificación ASCII (aunque tengo puesto el --utf8-- correctamente en los 2 scripts).

Pero voy a seguir estudiando tu código para ver en qué se diferencia del mio, y así poder corregir esos mis errores.

Muchas gracias por tu ayuda!

EDITO:

Bueno, gracias a tu código pude ver lo que me faltaba. Eran varios errores, y una vez corregidos todo ha funcionado correctamente. Me explico por si otros tienen el mismo problema:

Lo primero, que hay que vincular la escena antes de llamarla.

Lo segundo, que hay que usar “self” antes de cada llamada a “pilas”.

Lo tercero, que no habia importado aquí ficheros que se necesitaban (incluida la class Mi_Actor). Probando con un actor.Mono() he visto donde estaba el fallo.

Y creo que eso era “todo” UFFFFFFFFFFFFF… Voy a dejar un ejemplo reducido por si alguien más tiene el mismo problema.

# Fichero principal del programa, desde donde se llama a la Escena en otro fichero.py

import pilasengine

import misescenas #importamos el fichero donde tenemos la escena

pilas=pilasengine.iniciar()

# Vinculamos la escena que queremos llamar
pilas.escenas.vincular(misescenas.Vista2) # El fichero se llama misescenas, y la escena Vista2

# Una vez vinculado podemos llamarlo, si lo llamamos antes no funciona
pilas.escenas.Vista2()

pilas.ejecutar()

Y ahora el fichero con la escena:

# -*- encoding: utf-8 -*-
# Fichero misescenas.py

import pilasengine

class Vista2(pilasengine.escenas.Escena):
	def iniciar(self):
		self.fondo = self.pilas.fondos.Tarde()
		self.actor3=self.pilas.actores.Mono()
		self.actor3.x = self.pilas.azar(-200,200)	
		self.actor3.y = -160
		self.actor3.escala = 0.8

IMPORTANTE: Siempre SELF antes de PILAS.

Y creo que eso era todo, si me equivoco en algo por favor corrijanme para no confundir a otros :wink:

1 Like