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
Podczas pakowania gry Defold umieszcza wszystkie zasoby gry w końcowej paczce właściwej dla danej platformy. W większości przypadków jest to korzystne, ponieważ działający silnik ma natychmiastowy dostęp do wszystkich zasobów i może szybko wczytywać je z pamięci masowej. Czasem jednak warto odłożyć wczytywanie części zasobów na później. Na przykład gdy:
Funkcja Live update rozszerza koncepcję Collection proxy (pełnomocnika kolekcji) o mechanizm, który pozwala środowisku uruchomieniowemu pobierać i przechowywać w paczce aplikacji zasoby celowo pominięte podczas budowania.
Pozwala to podzielić zawartość na wiele archiwów:
Załóżmy, że tworzymy grę zawierającą duże obrazy w wysokiej rozdzielczości. Gra przechowuje te obrazy w kolekcjach z obiektem gry i sprite’em korzystającym z obrazu:

Aby silnik wczytywał taką kolekcję dynamicznie, wystarczy dodać komponent Collection proxy i wskazać w nim monalisa.collection. Gra może wtedy zdecydować, kiedy wczytać zawartość kolekcji z pamięci masowej do pamięci operacyjnej, wysyłając do Collection proxy wiadomość load. My jednak chcemy pójść dalej i samodzielnie kontrolować wczytywanie zasobów zawartych w kolekcji.
Robi się to po prostu przez zaznaczenie pola wyboru Exclude we właściwościach Collection proxy, co informuje Defold, aby podczas tworzenia paczki aplikacji pominął całą zawartość monalisa.collection.
Żadne zasoby, do których odwołuje się bazowa paczka gry, nie zostaną wykluczone.

Gdy Defold tworzy paczkę aplikacji, musi gdzieś zapisać wykluczone zasoby. Lokalizację tych zasobów określają ustawienia projektu Live update. Znajdziesz je pod Project ▸ Live update Settings.... Jeśli plik ustawień jeszcze nie istnieje, zostanie utworzony. W pliku game.project wybierasz, którego pliku ustawień Live update użyć podczas pakowania. Umożliwia to stosowanie różnych ustawień Live update dla różnych środowisk, na przykład produkcyjnego, QA lub deweloperskiego.

Obecnie Defold może przechowywać zasoby na trzy sposoby. Metodę wybierasz w liście rozwijanej Mode w oknie ustawień:
ZipFolderAmazonBudowanie i uruchamianie projektu z poziomu edytora (Project ▸ Build) nie obsługuje Live Update. Aby przetestować Live Update, musisz spakować projekt.
Aby spakować projekt z Live update, wybierz Project ▸ Bundle ▸ ..., a następnie platformę, dla której chcesz utworzyć paczkę aplikacji. Otworzy się okno pakowania:

Podczas pakowania wszystkie wykluczone zasoby zostaną pominięte w paczce aplikacji. Zaznaczając pole Publish Live update content, informujesz Defold, aby albo wysłał wykluczone zasoby do Amazon, albo utworzył archiwum Zip, zależnie od tego, jak skonfigurowano ustawienia Live update (zobacz wyżej). Opublikowana zawartość Live Update nadal zawiera liveupdate.game.dmanifest, który przechowuje pełną listę zasobów potrzebną do zdalnej dystrybucji.
Podczas publikowania archiwalnej zawartości Live Update opcja Strip Live Update Entries from Main Manifest (liveupdate.exclude_entries_from_main_manifest) jest domyślnie włączona. Przy tym ustawieniu zasoby używane wyłącznie przez Live Update są usuwane z dołączonego do bundla game.dmanifest, co zmniejsza rozmiar bundla i zużycie pamięci w czasie działania. Wyłącz ją tylko wtedy, gdy potrzebujesz przestarzałego zachowania, w którym wykluczone wpisy pozostają w dołączonym game.dmanifest.
Przy włączonym ustawieniu domyślnym collectionproxy.get_resources() zwraca {}, dopóki odpowiednie archiwum nie zostanie zamontowane. Po zamontowaniu zwraca hashe zasobów dla danego proxy.
Kliknij Package i wybierz lokalizację dla paczki aplikacji. Teraz możesz uruchomić aplikację i sprawdzić, czy wszystko działa zgodnie z oczekiwaniami.
Plik .zip Live update zawiera pliki, które zostały wykluczone z bazowej paczki gry.
Obecny pipeline obsługuje tworzenie tylko jednego pliku .zip, ale w praktyce można podzielić ten plik na mniejsze pliki .zip. Umożliwia to mniejsze pobieranie dla gry: pakiety poziomów, zawartość sezonowa itp. Każdy plik .zip zawiera również manifest opisujący metadane każdego zasobu znajdującego się w tym pliku .zip.
Często warto podzielić wykluczoną zawartość na kilka mniejszych archiwów, aby uzyskać dokładniejszą kontrolę nad użyciem zasobów. Jednym z przykładów jest podział gry opartej na poziomach na kilka pakietów poziomów. Innym jest umieszczenie różnych świątecznych dekoracji UI w osobnych archiwach i wczytywanie oraz montowanie tylko tego motywu, który jest aktualnie aktywny w kalendarzu.
Graf zasobów jest przechowywany w build/default/game.graph.json i jest generowany automatycznie przy każdym pakowaniu projektu. Wygenerowany plik zawiera listę wszystkich zasobów w projekcie oraz zależności każdego zasobu. Przykładowy wpis:
{
"path" : "/game/player.goc",
"hexDigest" : "caa342ec99794de45b63735b203e83ba60d7e5a1",
"children" : [ "/game/ship.spritec", "/game/player.scriptc" ]
}
Każdy wpis ma pole path, które reprezentuje unikalną ścieżkę zasobu w projekcie. Pole hexDigest reprezentuje kryptograficzny odcisk zasobu i będzie jednocześnie nazwą pliku używaną w archiwum .zip Live update. Pole children zawiera listę innych zależności, od których zależy ten zasób. W powyższym przykładzie /game/player.goc zależy od komponentu sprite i komponentu script.
Możesz sparsować plik game.graph.json i użyć tych informacji do identyfikacji grup wpisów w grafie zasobów oraz zapisać odpowiadające im zasoby w osobnych archiwach razem z oryginalnym plikiem manifestu. Manifest zostanie później przycięty w runtime tak, aby zawierał tylko pliki znajdujące się w archiwum.
Możesz użyć Play Asset Delivery do pobierania i montowania zawartości Live Update. Więcej informacji znajdziesz w oficjalnej instrukcji.
Jedną z głównych cech systemu live update jest to, że możesz korzystać z wielu archiwów zawartości, potencjalnie pochodzących z wielu różnych wersji Defold.
Domyślne zachowanie liveupdate.add_mount() polega na dodaniu sprawdzenia wersji silnika podczas dołączania mounta. Oznacza to, że zarówno bazowe archiwum gry, jak i archiwa Live update muszą zostać utworzone jednocześnie, z tą samą wersją silnika i przy użyciu opcji bundle. W przeciwnym razie klient unieważni wcześniej pobrane archiwa i wymusi ponowne pobranie zawartości.
To zachowanie można wyłączyć odpowiednią flagą opcji. Po wyłączeniu pełna odpowiedzialność za weryfikację zawartości spoczywa na deweloperze, który musi zagwarantować, że każde archiwum Live update będzie działało z uruchomionym silnikiem.
Zalecamy przechowywanie metadanych dla każdego mounta, aby bezpośrednio po uruchomieniu deweloper mógł zdecydować, czy dany mount lub archiwum należy usunąć. Jednym ze sposobów jest dodanie do archiwum zip dodatkowego pliku po spakowaniu gry, na przykład metadata.json z dowolnymi informacjami wymaganymi przez grę. Następnie przy starcie gry można je odczytać przez sys.load_resource("/metadata.json"). Pamiętaj, że dla niestandardowych danych każdego mounta potrzebna jest unikalna nazwa, w przeciwnym razie mounty zwrócą plik o najwyższym priorytecie.
Jeśli tego nie zrobisz, możesz doprowadzić do sytuacji, w której zawartość w ogóle nie będzie zgodna z silnikiem, co zmusi go do zamknięcia się.
System Live update może jednocześnie używać wielu archiwów zawartości. Każde archiwum jest „montowane” w systemie zasobów silnika z nazwą i priorytetem.
Jeśli dwa archiwa mają ten sam plik sprite.texturec, silnik wczyta plik z mounta o najwyższym priorytecie.
Silnik nie przechowuje referencji do żadnego zasobu znajdującego się w mouncie. Gdy zasób zostanie wczytany do pamięci, archiwum może zostać odmontowane. Zasób pozostanie w pamięci do momentu, gdy zostanie zwolniony.
Mounty są automatycznie dodawane ponownie po restarcie silnika.
Montowanie archiwum nie kopiuje go ani nie przenosi. Silnik przechowuje tylko ścieżkę do archiwum. Dzięki temu deweloper może usunąć archiwum w dowolnej chwili, a mount zostanie usunięty przy następnym uruchomieniu.
Aby faktycznie korzystać z zawartości Live update, musisz pobrać dane i zamontować je w swojej grze. Więcej informacji znajdziesz w instrukcji skryptowania z Live update.
Przestarzały przepływ Live Update oparty na pojedynczych zasobach jest wycofywany. W nowych projektach unikaj collectionproxy.missing_resources(), przestarzałych API manifestu (liveupdate.get_current_manifest(), liveupdate.store_resource(), liveupdate.store_manifest(), liveupdate.store_archive(), liveupdate.is_using_liveupdate_data()) oraz starych aliasów pomocniczych resource.* (resource.get_current_manifest(), resource.store_resource(), resource.store_manifest(), resource.store_archive(), resource.is_using_liveupdate_data()).
Obecne projekty powinny publikować archiwa, montować je przez liveupdate.add_mount(), zarządzać nimi przez liveupdate.get_mounts() i liveupdate.remove_mount(), oraz używać collectionproxy.get_resources(), gdy trzeba sprawdzić wykluczoną zawartość proxy. Starsze klucze podpisywania manifestów nie są już częścią tego przepływu: publickey i privatekey w liveupdate.settings są przestarzałe i nieużywane, a game.public.der nie jest już generowany ani pakowany.

Gra uruchomi się wtedy z oknem powłoki, w którym będą wyświetlane wszystkie wywołania print():

print(sys.get_save_file("", "")).
Plik liveupdate.mounts znajduje się w “local storage”, a jego ścieżka jest wypisywana na konsolę przy uruchomieniu jako “INFO:LIVEUPDATE: Live update folder located at: …”
