Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

Guardar niveles de un juego que usa tiled map
Started by quinohp Apr 19 2018 11:23 AM

5 replies to this topic
[TOPIC CONTROLS]
This topic has been archived. This means that you cannot reply to this topic.
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

quinohp

[GLOBAL: userInfoPane.html]
quinohp
  • Enthusiast

  • 37 posts
  • Corona SDK

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:



[TOPIC: post.html]
#2

roaminggamer

[GLOBAL: userInfoPane.html]
roaminggamer
  • Corona Geek

  • 7,591 posts
  • Corona SDK

[TOPIC: post.html]
#3

roaminggamer

[GLOBAL: userInfoPane.html]
roaminggamer
  • Corona Geek

  • 7,591 posts
  • Corona SDK

[TOPIC: post.html]
#4

quinohp

[GLOBAL: userInfoPane.html]
quinohp
  • Enthusiast

  • 37 posts
  • Corona SDK

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.



[TOPIC: post.html]
#5

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

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!



[TOPIC: post.html]
#6

quinohp

[GLOBAL: userInfoPane.html]
quinohp
  • Enthusiast

  • 37 posts
  • Corona SDK

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!

 

 

 

 

 

 




[topic_controls]
[/topic_controls]