Como fazer savegames

2

Construct 2 fornece uma maneira fácil de fazer savegames. Eles permitem que os seus jogadores salve o jogo, e em seguida, voltar mais tarde e carregá-lo a partir de exatamente onde parou. É importante para os jogos longos, especialmente quando os levels ou estágios são longos. Embora seja possível voltar ao "último level alcançado" de forma simples utilizando WebStorage, é geralmente muito difícil de usá-lo para salvar o estado completo de cada último objeto. O System object Salva e Carrega as ações permitindo que você faça exatamente isso, fazendo com que você facilmente adicione funcionalidade de savegame sofisticado, com muito pouco esforço.

Suporte básico de savegame

Uma maneira simples de adicionar savegames é apenas usando o sistema de ações Save e Load quando uma determinada tecla é pressionada. Por exemplo:

Para os jogos mobile, obviamente, você vai precisar fazer um botão de touch em algum lugar em vez disso, mas para manter as coisas simples, vamos nos concentrar em um jogo de desktop.

Savegames são armazenadas no disco pelo navegador. Isto significa que os jogadores podem desligar o seu computador ou dispositivo, voltar no dia seguinte, e o savegame ainda pode ser carregado com êxito. Note, no entanto savegames estão associados com o navegador específico. Por exemplo, Firefox e Chrome armazenará savegames separadamente; se um jogador salva um jogo enquanto estiver usando Chrome, em seguida, muda para o Firefox, eles não serão capazes de carregar o savegame.

Os savegames não são salvos no cache . O cache do navegador é um armazenamento temporário que é utilizado para guardar coisas como imagens em páginas da web sem ter que baixá-las novamente a cada vez, e é apagada regularmente. Savegames não ficam lá (felizmente), eles são armazenados em WebStorage ou IndexedDB, que são a armazenagem permanentes e não são afetados caso o usuário limpe seu cache.

Save slots

Muitas vezes é útil para permitir que os jogadores tenha vários jogos salvos. Isto é o que o Save slot permite. Cada slot é como um arquivo separado que armazena um diferente save. Você poderia oferecer ao jogador um conjunto de slots de save, ou permitir que eles coloquem seus próprios nomes no savegame.

Observe que a maioria dos navegadores têm um limite sobre a quantidade de dados que uma página web pode guardar no disco. Esta é pouco provável que seja um problema para a maioria dos jogos, mas se você tiver um grande número de slots de save separado, você pode bater o limite de armazenamento. Oferecendo um número limitado de slots de save é uma boa maneira de garantir que você nunca atinja o limite. O uso adequado do comportamento No save também pode ajudar a fazer savegames menores (veja abaixo).

Triggers (Gatilhos) Concluídos

O save pode levar um tempo para completar-se, mas o jogo continua rodando no tempo médio. Uma vez que o save foi concluído, o trigger On save complete pode ser usado. Da mesma forma o loading pode ter um tempo para terminar, e então acontece On load complete quando terminar. Observe as alterações feitas após a ação Save, mas antes o trigger On save complete , ainda pode ser salvo.

Se você tentar carregar a partir de um slot que não foi salvo ainda, On load failed será desencadeada. Se o usuário estiver escolhendo um slot de save para carregar (load), você pode apenas querer começar um novo jogo neste evento.

'No Save' behavior

Qualquer coisa com o No Save behavior não serão salvos, e não será afetado ao carregar. É uma boa prática para adicionar o comportamento No Save a quaisquer objetos estáticos, como paisagens e fundos. Ele também pode ser usado em objetos automaticamente atualizados como os objetos HUD e de texto que são atualizados a cada every tick. Isso não vai fazer qualquer diferença para o jogo, mas irá fazer savegames menor e mais rápidos para salvar e carregar, uma vez que a informação desnecessária é omitida. (Também é necessário fazer continuous preview trabalhar de forma eficaz.)

Alterar o projeto depois de salvar

Savegames deve ser robusto às mudanças no seu projeto. Você deve ser capaz de adicionar, remover e reordenar várias coisas como variáveis, comportamentos e outros objetos, e ainda carregar (load) savegames antigos com sucesso. Note que nada de novo que você adicionar não terá salvar dados para isso, então não será afetado ao carregar. Observe também que se você remover qualquer coisa, o projeto não será capaz de carregar novamente. Você pode excluir instâncias individuais sem savegames que afetam, mas se você remover tipos de objetos inteiros, layouts ou camadas, eles nunca vão ser carregado de volta a partir de um savegame.

Tópicos Avançados

Tudo falado até agora é o suficiente para a maioria dos jogos para adicionar facilmente um recurso de savegame. Entretanto, os usuários avançados podem estar interessados nos tópicos seguintes, que vão para mais detalhes sobre o sistema de savegame.

Rastreamento quais slots são usados

O sistema de ações save/load não dizem quais slots foram salvos. A melhor maneira de controlar isso é armazenar algumas meta-dados extras no objeto WebStorage. Por exemplo, sempre que você salvar para um slot, também escrever uma chave no WebStorage que indica o slot que foi salvo. Você pode adicionar alguns outros metadados, como o nome do jogador ou até mesmo um pequeno screenshot do jogo como um URI de dados. Então você pode dizer que os slots estão em uso a partir dos dados do WebStorage que você salvou. Você também pode realizar outras modificações como a redefinição ou limpando os dados do jogo savegame apenas ajustando essas chaves do meta-dados, como removê-los para tornar o slot vazio novamente.

O que é e não é salvo

O estado completo do jogo - incluindo variáveis de instância, variáveis globais e locais, propriedades de comportamento, efeitos de partículas, tocando áudio atual, etc. - é salvo. No entanto, existem algumas exceções, espero que nenhum dos quais seja surpreendente. As seguintes coisas não são guardadas e não serão afetadas quando o carregamento acontece:

- Input state (ex: posição do mouse, ou se o jogador estava segurando as chaves ou toques)

- AJAX solicitações

- WebSocket conexões

- XML objeto

- Vídeo de mídia do usuário ou feeds de áudio

- Facebook login

- WebStorage estado

- CocoonJS/Windows 8 estado

- Quaisquer compras no aplicativo em qualquer plataforma

- Qualquer coisa com o comportamento "No Save"

Usando os dados JSON diretamente

Em ambos os On save complete e On load complete triggers, a expressão do sistema SaveStateJSON retorna um string de todos os dados JSON para o savegame. Observe que a expressão SaveStateJSON retornará uma seqüência vazia fora desses triggers; os triggers são a sua única oportunidade de acessar os dados diretamente.

Se você tiver seu próprio servidor, é possível fazer savegames compartilhados por postar os dados JSON para o servidor com o objeto AJAX e armazená-lo em um banco de dados do servidor. Alternativamente algumas plataformas como Windows 8 e Clay.io permitem armazenar dados para o usuário conectado, onde ela é compartilhada em qualquer lugar que eles fazerem o login. Este é um instrumento útil para permitir que os usuários usem savegames onde quer que eles vá.

Depois de conseguir a string JSON de volta, você pode carregar o jogo a partir dele usando a ação do sistema Load from JSON .

Versões

Normalmente você vai ser capaz de mudar seu projeto e jogos antigos ainda irá carregar muito bem. No entanto, alguns usuários avançados podem querer acompanhar com precisão qual a versão do seu projeto um savegame foi salvo. Você pode fazer isso usando uma variável global. Chame a variável Version e dê o valor inicial 1. Mais tarde, se você publicar uma nova versão do seu jogo, altere o valor inicial da variável para um novo número, por exemplo, 2. Agora, quando acontecer o trigger On load complete , a variável global será carregada e ajustada com o valor de Version no momento da ação Save for utilizada. Isto pode ser útil se você adicionar muitos novos objetos para o jogo, mas quer ter certeza de que eles estão destruídas ou ocultadas ao carregar savegames de antigos.

Galera em poucas partes não consegui traduzir direito, mas dá para entender seguindo a lógica. Siga meu twitter: @Paulo_Anry

  • 1 Comments

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