Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
como crear un sistema para manejar niveles
#1
Ya tengo la primera prueba para manejar dos niveles y no ha salido muy bien,tengo dos funciones y en cada una meto los objetos para cada nivel y luego tengo unos condicionales para decirle que nivel mostrar primero.En el bucle del juego le digo que si pulsa el boton A que elimine los objetos y pase al nivel 2,pero se queda un fondo sin eliminar y no pasa al siguiente nivel,no se muy bien como solucionar esto.

Te paso el archivo.
https://drive.google.com/file/d/1Z8iYzUe...sp=sharing
Reply
#2
Buenas!

Te lo adjunto funcionando, he puesto algunos comentarios en el código donde he cambiado. Así por encima:
  • "hero" y "fondos" deben ser accesibles globalmente, ya que luego te interesa borrarlos al cambiar de nivel, necesitas tenerlos disponibles
  • He unificado nivel1() y nivel2() en una única función init_level(n) con parámetro de nivel, ya que básicamente hacen lo mismo, sólo que dependiendo del nivel cargan un personaje y unos fondos u otros.
  • He añadido la función deinit_level() como complemento del anterior, encargada de liberar los recursos asociados al nivel actual
  • La comprobación de pulsar la tecla no tiene que estar condicionada a si estás procesando a hero, sino a en qué nivel estás
  • Al pulsar la tecla en nivel 1, finaliza el nivel actual y carga el siguiente. En tu ejemplo sólo actualizabas la variable niveles, pero no llamabas a la función nivel2() que era la encargada de poner en marcha el siguiente nivel
Alguna duda?


Attached Files
.zip   prueba1.zip (Size: 1.21 KB / Downloads: 1)
Reply
#3
Gracias por toda la ayuda que me estas dando,mañana me pongo con ello que ya es muy tarde y la vista me hecha la bronca por usarla tanto. Wink

Se me olvidaba comentarte algo,fijate que en la carpeta hero y sotb solo estan los graficos de los sprites,los graficos de los fondos los tuve que quitar de hay porque me daba error al cargarlos,tal vez un bug o fallo mio,no se... pruebalo tu.
Reply
#4
Ya tengo montado lo de los niveles y despues de realizar algunas pruebas tengo algunas dudas.

1-Las variables hero y fondos tienen la palabra "None",hay alguna diferencia entre poner None o poner 0.

2-En la funcion init_level() tienes puesto la variables con la palabra "global",si estas variables ya son globales al estar arriba porque se les pone "global"

3-En la funcion init_level(n) tiene como parametro la "n" y luego se la asignas a la variable niveles,no se podria haber puesto directamente en el parametro la variable niveles

4-En la funcion deinit_level() veo que no has utilizado un for para recorrer la lista de actores,supongo que sera porque solo es un actor y un fondo en cada nivel,pero lo que no entiendo es porque no has desactivado los layers al igual que el sprite hero.
Reply
#5
Hola!

De nada por la ayuda, para esto está el foro  Smile

La carga de niveles no te funciona  desde una subcarpeta haciendo "xxx.fromfile("carpeta/archivo") porque el tmx a su vez carga un png, pero no lo encuentra porque lo busca en la raíz, no en la subcarpeta. Para eso puse la función engine.set_load_path("carpeta"), para que el cargador busque lo que necesite ahí dentro. Si miras cualquiera de los ejemplos que tengo en el proyecto del wrapper o en el "PythonPlatformer" verás que siempre lo hago así, en una subcarpeta "assets" pongo todo, y al iniciar el programa hago "engine.set_load_path("assets"). Todo lo que intentes cargar a partir de sese momento lo buscará en la carpeta "assets".
http://www.tilengine.org/doc_python/tile..._load_path

1- A efectos prácticos da igual, pero como hero y fondo son instancias de objetos, la forma correcta de decir que no contienen nada es None. Si pones un 0 puedes dar a entender que esas variables almacenan números, cuando no es así.

2- Si no pones global, hero y fondos se crearían localmente dentro de la función init_level() y luego se perderían. Como lo que quieres es que actualice las variables globales en vez de crear unas locales, se usa la palabra global
https://micro.recursospython.com/recurso...lobal.html


3- Sí se podría, pero siempre es mejor actualizar una variable dentro del contexto de una función relacionada, que modificarlo directamente fuera, hace más fácil el mantenimiento.

4- Es porque sólo tenías un actor. Si hubiese muchos, en efecto lo correcto sería destruir la lista entera. No deshabilito las capas porque las gestionas directamente en la aplicación, independientemente del nivel siempre usas la 0 y la 1, que es lo correcto. No necesitas desactivarlas para asignarles otro mapa. En cambio en los sprites, como dejas a Tilengine que te los administre con la función get_available_sprite(), sí que tienes que deshabilitarlo expresamente para que sepa que ese sprite está nuevamente disponible.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)