Guardar niveles de un juego que usa tiled map

Hola,

Estoy montando un juego y las pantallas las estoy creando con tiled map editor en archivos .json los cuales los importo a mi game. ¿Alguien sabe qué método usar para guardar los niveles del juego en .json?

Saludos :rolleyes:

This tutorial uses Tiled for a game layout: https://docs.coronalabs.com/guide/programming/index.html#sticker-knight-platformer

This one does too: https://docs.coronalabs.com/guide/programming/index.html#endless-sk8boarder

You’ll want to check this out: https://github.com/ponywolf/ponytiled

Gracias por contestar roaminggamer.

Lo que pretendo es guardar en cualquier momento el juego, las pantallas que he conseguido para continuar el juego en cualquier momento.

En otros juegos utilizo la función saveLevels() con play.lua para guardar el juego:

local loadsave = require("salvarniveles") levels = { 1, 2, 2, 2, 2, --1 means level is open to be played (level.png)--\>NIVEL SIN JUGAR 2, 2, 2, 2, 2, --2 means level is locked (locked.png)--\>NO SE PUEDE JUGAR, (BOTA COLOR GRIS) 2, 2, 2, 2, 2 -- 3 means level is completed (greenchecked.png)--\>NIVEL JUGADO } levels = loadLevels()

Llamando a salvarniveles.lua:

local json = require("json") -------------------------------SALVAR NIVELES-------------------------------------------------------- function loadLevels() local base = system.pathForFile( "levels.json", system.DocumentsDirectory) local jsoncontents = "" local levelsArray = {} local file = io.open( base, "r" ) if file then local jsoncontents = file:read( "\*a" ) levelsArray = json.decode(jsoncontents); io.close( file ) return levelsArray end return levels end function saveLevels() local base = system.pathForFile( "levels.json", system.DocumentsDirectory) local file = io.open(base, "w") local jsoncontents = json.encode(levels) file:write( jsoncontents ) io.close( file ) end

Esto lo hago así porque tengo los niveles del juego separados por archivos; level01.lua, level02.lu etc. y al final, cuando colisinaba con la salida, ejecutaba esto:

 levels[1] = 3--Cuando el nive 1 concluye, lo salvamos (saveLevels()) como 3 if levels[2] == 3 then--Si el nivel 2 ya se ha logrado: es igual a 3:--\> --\>no hacemos nada else levels[2] = 1--De lo contrario lo pondremos a 1 para poder jugarlo end saveLevels() 

…pero en el juego que estoy creando ahora, sólo utilizo el archivo game.lua para desarollar todo el juego he importando en este los maps .json de tiled map editor y no sé qué hacer para guardar el juego.

No tengo muy claro dónde está tu duda. ¿Preguntas por un algoritmo para guardar todos los datos?¿O cómo hacerlo desde game.lua?

Lo que muestra arriba es la lectura de un archivo txt con una información codificada en json.

Lo que tienes que hacer es almacenar no sólo el estado del nivel, sinó además tienes que guardar la posición de los enemigos, y del jugador.

Puedes crear un archivo a parte con un Array json con esta codificación:

Estado_lvl={tipodeenemigo, posx, posy,vida…}

Ejemplo de 2 enemigos:
Estado_lvl = {“zombie”,21,55,9,“zombie”,109,89,2}

Ya sabes que cada 4 posiciones empieza un nuevo enemigo, por lo tanto puedes hacer algo así con un for (metacodigo):
 

for i=1,#estado\_lvl/4,4 do i -\> para crear tipo de monstruo Zombie.x = estado\_lvl[i+1] Zombie.y = estado\_lvl[i+2] Zombie.vida = estado\_lvl[i+3] End

Tendrías que mirar cómo almacenar la vida en la instancia zombie, creo que puedes añadirlo, pero yo no lo he hecho nunca.

Espero que te ayude el minitutorial. Saludos!

Hola Visstaralax, perdona que no te haya contestado antes. Ante todo gracias por responder a este topic.

Mi juego está basado en Sticker Knight Platformer y lo que pretendo es guardar la pantalla por la que voy, sin guardar posiciones de enemigos o cualquier objeto en movimiento, sólo la pantalla:

game.lua carga los mapas de cada pantalla, cuando termina una, empieza la otra:

sandbox.json, sandbox2.json, sandbox3.json, etc.

Si estoy jugando y voy por la pantalla 3 (sandbox3.json) y quiero guardarla, no sé cómo hacerlo para cuando quiera cargarla de nuevo.

Saludoss!

 

 

This tutorial uses Tiled for a game layout: https://docs.coronalabs.com/guide/programming/index.html#sticker-knight-platformer

This one does too: https://docs.coronalabs.com/guide/programming/index.html#endless-sk8boarder

You’ll want to check this out: https://github.com/ponywolf/ponytiled

Gracias por contestar roaminggamer.

Lo que pretendo es guardar en cualquier momento el juego, las pantallas que he conseguido para continuar el juego en cualquier momento.

En otros juegos utilizo la función saveLevels() con play.lua para guardar el juego:

local loadsave = require("salvarniveles") levels = { 1, 2, 2, 2, 2, --1 means level is open to be played (level.png)--\>NIVEL SIN JUGAR 2, 2, 2, 2, 2, --2 means level is locked (locked.png)--\>NO SE PUEDE JUGAR, (BOTA COLOR GRIS) 2, 2, 2, 2, 2 -- 3 means level is completed (greenchecked.png)--\>NIVEL JUGADO } levels = loadLevels()

Llamando a salvarniveles.lua:

local json = require("json") -------------------------------SALVAR NIVELES-------------------------------------------------------- function loadLevels() local base = system.pathForFile( "levels.json", system.DocumentsDirectory) local jsoncontents = "" local levelsArray = {} local file = io.open( base, "r" ) if file then local jsoncontents = file:read( "\*a" ) levelsArray = json.decode(jsoncontents); io.close( file ) return levelsArray end return levels end function saveLevels() local base = system.pathForFile( "levels.json", system.DocumentsDirectory) local file = io.open(base, "w") local jsoncontents = json.encode(levels) file:write( jsoncontents ) io.close( file ) end

Esto lo hago así porque tengo los niveles del juego separados por archivos; level01.lua, level02.lu etc. y al final, cuando colisinaba con la salida, ejecutaba esto:

 levels[1] = 3--Cuando el nive 1 concluye, lo salvamos (saveLevels()) como 3 if levels[2] == 3 then--Si el nivel 2 ya se ha logrado: es igual a 3:--\> --\>no hacemos nada else levels[2] = 1--De lo contrario lo pondremos a 1 para poder jugarlo end saveLevels() 

…pero en el juego que estoy creando ahora, sólo utilizo el archivo game.lua para desarollar todo el juego he importando en este los maps .json de tiled map editor y no sé qué hacer para guardar el juego.

No tengo muy claro dónde está tu duda. ¿Preguntas por un algoritmo para guardar todos los datos?¿O cómo hacerlo desde game.lua?

Lo que muestra arriba es la lectura de un archivo txt con una información codificada en json.

Lo que tienes que hacer es almacenar no sólo el estado del nivel, sinó además tienes que guardar la posición de los enemigos, y del jugador.

Puedes crear un archivo a parte con un Array json con esta codificación:

Estado_lvl={tipodeenemigo, posx, posy,vida…}

Ejemplo de 2 enemigos:
Estado_lvl = {“zombie”,21,55,9,“zombie”,109,89,2}

Ya sabes que cada 4 posiciones empieza un nuevo enemigo, por lo tanto puedes hacer algo así con un for (metacodigo):
 

for i=1,#estado\_lvl/4,4 do i -\> para crear tipo de monstruo Zombie.x = estado\_lvl[i+1] Zombie.y = estado\_lvl[i+2] Zombie.vida = estado\_lvl[i+3] End

Tendrías que mirar cómo almacenar la vida en la instancia zombie, creo que puedes añadirlo, pero yo no lo he hecho nunca.

Espero que te ayude el minitutorial. Saludos!

Hola Visstaralax, perdona que no te haya contestado antes. Ante todo gracias por responder a este topic.

Mi juego está basado en Sticker Knight Platformer y lo que pretendo es guardar la pantalla por la que voy, sin guardar posiciones de enemigos o cualquier objeto en movimiento, sólo la pantalla:

game.lua carga los mapas de cada pantalla, cuando termina una, empieza la otra:

sandbox.json, sandbox2.json, sandbox3.json, etc.

Si estoy jugando y voy por la pantalla 3 (sandbox3.json) y quiero guardarla, no sé cómo hacerlo para cuando quiera cargarla de nuevo.

Saludoss!