Como guardar una partida

1
Published on 26 Dec, 2013. Last updated 25 Feb, 2019

Con Construct 2 puedes guardar una partida de forma sencilla. Esto le permitirá a los jugadores guardar la partida y volver más tarde para cargarla donde la dejó en su momento. Esto es algo fundamental en juegos largos, sobre todo cuando los niveles o las pantallas son muy extensas. Una manera sencilla de guardar el "último nivel alcanzado" es usar WebStorage, aunque es muy difícil guardar el último estado de cada objeto. Las acciones del Objeto sistema Save (Guardar) y Load (Cargar) te permiten precisamente hacer eso, crear con poco esfuerzo un completo "guardapartidas" sofisticado y sencillo.

Conceptos básicos para guardar partidas

Una forma sencilla de hacer esto es usar las acciones de sistema Save y Load cuando se pulsa alguna tecla. Por ejemplo:

En los juegos para móviles necesitas crear un botón táctil en algún lugar, pero para no complicarnos la vida nos centraremos en los juegos de escritorio.

Las partidas guardadas las almacena el navegador en el disco duro. De esta forma los jugadores pueden apagar tranquilamente sus dispositivos, volver al día siguiente y la partida guardada se cargará sin problemas. Cada partida está asociada al navegador que la guardó. Por ejemplo, Firefox y Chrome guardan los archivos de forma separada: si un jugador guarda un juego usando Chrome y luego abre el Firefox, no podrá cargarlo.

Las partidas guardadas no se almacenan en la cache. La cache del navegador es temporal y se usa para guardar cosas como imágenes o sitios web para no tener que recargarlos cada vez y, además, se limpia con frecuencia. Las partidas, por suerte, se almacenan con Webstorage o IndexDB, que son lugares permanentes no afectados por la limpieza de la cache.

Slots de guardado

Es útil permitir a los jugadores tener varios juegos guardados, y eso es lo que permite el slot de guardado. Cada slot es como un archivo diferente que almacena una partida distinta. Podrías ofrecer al jugador un conjunto de slots para guardar o permitirle escribir sus propios nombres para guardar la partida.

Ten en cuenta que la mayoría de navegadores limita la cantidad de información que una web puede guardar en el disco. Esto no debería de ser un problema para la mayoría de juegos, pero si tienes un gran número de slots podrías llegar al límite de almacenamiento. Ofrecer sólo un número limitado de slots es una buena manera de no alcanzar ese límite. Un uso apropiado del comportamiento No Save pueden ayudar a reducir el tamaño del archivo guardado (ampliado más abajo).

Activadores completados

El guardado de la partida puede tardar un poco en completarse y, mientras tanto, el juego sigue activo. Una vez que se ha completado el proceso, el Sistema ejecuta los activadores (triggers) On save complete (Guardado completado). De la misma forma la carga del juego puede llevar un poco de tiempo y cuando finaliza se ejecutan las acciones de On load complete. Cualquier cambio realizado después de la acción Save pero antes de On save complete aún puede ser guardado.

Si intentas cargar una partida desde un slot donde aún no se ha guardado nada, se ejecutará un On load failed (Carga fallida). Si el usuario está eligiendo un slot de guardado para cargar, es posible que quieras incluir en este evento la opción de comenzar un juego nuevo.

Comportamiento 'No Save'

Todo lo que lleve el Comportamiento No Save no será guardado, y no se verá afectado cuando se realice una carga. Es una práctica recomendable añadir este comportamiento a cualquier objeto estático, como un escenario o los fondos. También puede ser usado en los objetos que se actualizan automáticamente como el HUD y los objetos de texto que se actualizan en cada tick. Esto no afectará al juego, pero hará más pequeños y rápidos a los archivos de guardado, ya que se omite la informació innecesaria. (También es necesario realizar una vista previa continua que funcione de forma eficaz.)

Cambiar el proyecto después del guardado

Las partidas guardadas deben aguantar bien que hagas cambios en el proyecto. Deberías ser capaz de añadir, borrar y reordenar cosas como variables, comportamientos y otros objetos, y aún así poder cargar partidas antiguas correctamente. Cualquier añadido que hagas no tendrá datos guardados, así que no se verá afectado al cargar la partida. Ten en cuenta que si borras algo de tu proyecto no será posible cargarlo de nuevo. Puedes borrar instancias individuales sin que se vea afectada la partida guardada, pero si borras completamente tipos de objeto, layouts o capas, nunca más se cargarán.

Temas avanzados

Lo explicado haste el momento es suficiente para que la mayoría de juegos puedan añadir un "guardapartidas". Para aquellos que quieran conocer en detalle el sistema de guardado les invito a seguir leyendo.

Registrar que slots están en uso

Las acciones de sistema save/load no dicen que slots se usan. La mejor manera para registrar esto es almacenar alguna información extra en el objeto WebStorage. Por ejemplo, cada vez que guardes un slot, escribe una clave (key) WebStorage que indique en que slot se guarda la partida. Puedes añadir más metadatos como el nombre del jugador o una pequeña captura de pantalla como URI. Después puedes saber que slots están en uso con esta información que has guardado. También puedes optimizar otras operaciones como resetear o limpiar el juego guardado ajustando estas claves de metadatos, como borrarlas para hacer que el slot esté vacío de nuevo.

Lo que se guarda y lo que no

El estado completo del juego - incluyendo variables de instancia, variables globales y locales, propiedades de comportamientos, efectos, partículas, los sonidos que están sonando, etc.. - se guarda. Hay algunas excepciones aunque ninguna debería sorprendernos. A continuación, un listado con todo aquello que no se guarda y no se verá afectado al cargarse de nuevo:

- Estados de input (por ejemplo la posición del ratón o si el jugador estaba pulsando alguna tecla o tocando la pantalla)

- Llamadas AJAX

- Conexiones WebSocket

- El objeto XML

- Entradas de audio o vídeo del usuario

- Estado de Facebook

- Estado de WebStorage

- Estado de CocoonJS/Windows 8

- Cualquier in-app purchases de cualquier plataforma

- Nada que tenga el comportamiento 'No Save'

Usando los datos JSON de forma directa

En los activadores On save complete y On load complete, la expresión de sistema SaveStateJSON devuelve una cadena de texto con todos los datos JSON de la partida guardada. Si no se usan estos activadores, la expresión devolverá una cadena de texto vacía; los activadores son la única forma de acceder a la información directamente.

Si tienes tu propio servidor, es posible crear partidas guardadas compartidas enviando los datos JSON al servidor con el objeto AJAX y almacenándolos en una base de datos. Algunas plataformas como Windows 8 o Clay.io también te permiten almacenar información para el usuario que este logueado y que así la pueda compartir en cualquier lugar donde tenga el mismo login. Es útil para permitir a los usuarios tener sus partidas con ellos estén donde estén.

Una vez que tengas el texto JSON, puedes cargar el juego usando la acción de sistema Load from JSON.

Versiones

Habitualmente harás cambios en tu proyecto y los juegos antiguos deberían seguir cargando bien. Aún así algunos usuarios avanzados pueden querer saber exactamente que versión del proyecto guardado están usando. Puedes hacer esto usando una variable global, nómbrandola como Version y dándole un valor de 1. Si luego publicas una nueva versión del juego, ponle otro número, por ejemplo 2. En los activadores de On load complete, se cargará la variable global de Version a la vez que se use la acción Save. Esto puede ser útil si añades muchos objetos al juego, pero quieres asegurarte que se destruyan u oculten cuando se cargan partidas antiguas.

  • 0 Comments

Want to leave a comment? Login or Register an account!