This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Ao empacotar um jogo, o Defold empacota todos os recursos do jogo no pacote específico da plataforma resultante. Na maioria dos casos, isso é preferível, pois a engine em execução tem acesso instantâneo a todos os recursos e pode carregá-los rapidamente do armazenamento. No entanto, há situações em que você pode querer adiar o carregamento de recursos para um estágio posterior. Por exemplo:
A funcionalidade Live Update expande o conceito de proxy de coleção com um mecanismo que permite ao runtime buscar e armazenar no pacote da aplicação recursos que foram intencionalmente deixados fora do pacote durante a build.
Ela permite dividir seu conteúdo em vários arquivos:
Suponha que estamos criando um jogo que contém recursos de imagem grandes e em alta resolução. O jogo mantém essas imagens em coleções com um objeto de jogo e um sprite com a imagem:

Para fazer a engine carregar essa coleção dinamicamente, podemos simplesmente adicionar um componente de proxy de coleção e apontá-lo para monalisa.collection. Agora o jogo pode escolher quando carregar o conteúdo da coleção do armazenamento para a memória enviando uma mensagem load ao proxy de coleção. No entanto, queremos ir além e controlar nós mesmos o carregamento dos recursos contidos na coleção.
Isso é feito simplesmente marcando a caixa Exclude nas propriedades do proxy de coleção, instruindo o Defold a deixar qualquer conteúdo em monalisa.collection fora ao criar um pacote de aplicação.
Qualquer recurso referenciado pelo pacote base do jogo não será excluído.

Quando o Defold cria um pacote de aplicação, ele precisa armazenar em algum lugar quaisquer recursos excluídos. As configurações do projeto para Live Update controlam o local desses recursos. As configurações são encontradas em Projeto ▸ Live update Settings.... Isso criará um arquivo de configurações se nenhum existir. Em game.project, selecione qual arquivo de configurações live-update usar ao empacotar. Isso permite usar configurações live-update diferentes para ambientes diferentes, por exemplo live, QA, desenvolvimento etc.

Atualmente, há três formas pelas quais o Defold pode armazenar os recursos. Escolha o método no menu suspenso Mode na janela de configurações:
ZipFolderAmazonCompilar e executar a partir do editor (Projeto ▸ Compilar) não oferece suporte a Live Update. Para testar Live Update, você precisa empacotar o projeto.
Empacotar com Live Update é fácil. Selecione Projeto ▸ Empacotar ▸ ... e então a plataforma para a qual deseja criar um pacote de aplicação. Isso abre o diálogo de empacotamento:

Ao empacotar, qualquer recurso excluído ficará fora do pacote de aplicação. Ao marcar a caixa Publish Live update content, você instrui o Defold a fazer upload dos recursos excluídos para a Amazon ou a criar um arquivo Zip, dependendo de como você configurou suas definições de Live Update (veja acima). O conteúdo Live Update publicado ainda inclui liveupdate.game.dmanifest, que contém a lista completa de recursos necessária para entrega remota.
Ao publicar conteúdo Live Update baseado em arquivos, Strip Live Update Entries from Main Manifest (liveupdate.exclude_entries_from_main_manifest) é habilitado por padrão. Com essa configuração habilitada, recursos exclusivos de Live Update são removidos do game.dmanifest empacotado, o que reduz o tamanho do pacote e o uso de memória em tempo de execução. Desabilite-a apenas se você precisar do comportamento descontinuado em que entradas excluídas permanecem no game.dmanifest empacotado.
Com a configuração padrão habilitada, collectionproxy.get_resources() retorna {} até que o arquivo relevante tenha sido montado. Após a montagem, ela retorna os hashes de recursos para esse proxy.
Clique em Package e selecione um local para o pacote de aplicação. Agora você pode iniciar a aplicação e verificar se tudo funciona conforme esperado.
Um arquivo .zip live update contém arquivos que foram excluídos do pacote base do jogo.
Embora nosso pipeline atual ofereça suporte apenas à criação de um único arquivo .zip, na prática é possível dividir esse arquivo zip em arquivos .zip menores. Isso permite downloads menores para um jogo: pacotes de fases, conteúdo sazonal etc. Cada arquivo .zip também contém um arquivo de manifesto que descreve os metadados de cada recurso contido dentro do arquivo .zip.
Muitas vezes é desejável dividir o conteúdo excluído em vários arquivos menores para ter controle mais granular sobre o uso de recursos. Um exemplo é dividir um jogo baseado em fases em vários pacotes de fases. Outro é colocar decorações de UI com temas de feriados diferentes em arquivos separados e carregar e montar apenas o tema atualmente ativo no calendário.
O grafo de recursos é armazenado em build/default/game.graph.json e é gerado automaticamente sempre que o projeto é empacotado. O arquivo gerado contém uma lista de todos os recursos do projeto e as dependências de cada recurso. Exemplo de entrada:
{
"path" : "/game/player.goc",
"hexDigest" : "caa342ec99794de45b63735b203e83ba60d7e5a1",
"children" : [ "/game/ship.spritec", "/game/player.scriptc" ]
}
Cada entrada tem um path, que representa o caminho único do recurso dentro do projeto. O hexDigest representa a impressão digital criptográfica do recurso e será o nome do arquivo usado no arquivo .zip liveupdate. Por fim, o campo children é uma lista de outras dependências das quais esse recurso depende. No exemplo acima, /game/player.goc tem uma dependência de um componente sprite e de um componente script.
Você pode analisar o arquivo game.graph.json e usar essas informações para identificar grupos de entradas no grafo de recursos e armazenar seus recursos correspondentes em arquivos separados junto com o arquivo de manifesto original (o arquivo de manifesto será podado em tempo de execução para conter apenas os arquivos no arquivo montado).
É possível usar Play Asset Delivery para baixar e montar conteúdo Live Update. Saiba mais no manual oficial.
Uma das principais funcionalidades do sistema live update é que agora você pode usar muitos arquivos de conteúdo, potencialmente de muitas versões diferentes do Defold.
O comportamento padrão de liveupdate.add_mount() é adicionar uma verificação de versão da engine ao anexar um mount.
Isso significa que tanto o arquivo base do jogo quanto o(s) arquivo(s) live update precisam ser criados ao mesmo tempo com a mesma versão da engine, usando a opção de empacotamento. Isso invalidará quaisquer arquivos baixados anteriormente pelo cliente, forçando-o a baixar o conteúdo novamente.
Esse comportamento pode ser desativado com uma flag de opções. Quando desativado, a responsabilidade pela verificação de conteúdo fica inteiramente com o desenvolvedor, para garantir que cada arquivo live update funcionará com a engine em execução.
Recomendamos armazenar alguns metadados para cada mount, para que logo na inicialização o desenvolvedor possa decidir se o mount/arquivo deve ser removido.
Uma forma de fazer isso é adicionar um arquivo extra ao arquivo zip depois que o jogo tiver sido empacotado. Por exemplo, inserindo um metadata.json com qualquer informação relevante que o jogo exija. Então, na inicialização, o jogo pode recuperá-lo com sys.load_resource("/metadata.json"). Observe que você precisará de um nome único para os dados personalizados de cada mount, ou os mounts fornecerão o arquivo com a maior prioridade
Se você não fizer isso, pode acabar em uma situação em que o conteúdo não é compatível com a engine de forma alguma, forçando-a a encerrar.
O sistema live update pode usar vários arquivos de conteúdo ao mesmo tempo. Cada arquivo é “montado” no sistema de recursos da engine, com um nome e prioridade.
Se dois arquivos tiverem o mesmo arquivo sprite.texturec, a engine carregará o arquivo do mount com a prioridade mais alta.
A engine não mantém referência a nenhum recurso em um mount. Depois que um recurso é carregado na memória, o arquivo pode ser desmontado. O recurso permanecerá na memória até ser descarregado.
Os mounts são readicionados automaticamente na reinicialização da engine.
Montar um arquivo não copia nem move o arquivo. A engine armazena apenas o caminho para o arquivo. Portanto, o desenvolvedor pode remover o arquivo a qualquer momento, e o mount também será removido na próxima inicialização.
Para realmente usar o conteúdo live update, você precisa baixar e montar os dados no seu jogo. Leia mais sobre como programar com live update aqui.
O fluxo antigo de Live Update de recurso único foi descontinuado. Evite collectionproxy.missing_resources(), as APIs de manifesto descontinuadas (liveupdate.get_current_manifest(), liveupdate.store_resource(), liveupdate.store_manifest(), liveupdate.store_archive(), liveupdate.is_using_liveupdate_data()) e os antigos aliases auxiliares resource.* (resource.get_current_manifest(), resource.store_resource(), resource.store_manifest(), resource.store_archive(), resource.is_using_liveupdate_data()) em projetos novos.
Projetos atuais devem publicar arquivos, montá-los com liveupdate.add_mount(), gerenciá-los com liveupdate.get_mounts() e liveupdate.remove_mount(), e usar collectionproxy.get_resources() quando precisarem inspecionar conteúdo excluído de um proxy. Chaves antigas de assinatura de manifesto não fazem mais parte deste pipeline: publickey e privatekey de liveupdate.settings estão descontinuadas e não são usadas, e game.public.der não é mais gerado nem empacotado.

Agora o jogo inicia com uma janela de shell que exibirá quaisquer instruções print():

print(sys.get_save_file("", "")).
O arquivo liveupdate.mounts está localizado sob o “local storage”, e seu caminho é exibido no console na inicialização: “INFO:LIVEUPDATE: Live update folder located at: …”
