VorwortDieser Artikel zitiert hauptsächlich die offizielle Dokumentation von Cocos zu Hot-Updates und fasst auf dieser Grundlage den aktuellen Hot-Update-Prozess von Sprout zusammen. Was ist Hot ChangeHot Updates laden im Wesentlichen die erforderlichen Ressourcen vom Server auf das lokale Gerät herunter und führen eine neue Spiellogik aus, damit die neuen Ressourcen vom Spiel verwendet werden können. Entwickler können damit Fehler beheben und Funktionen freigeben, ohne eine neue Version herauszubringen. So können Entwickler den Überprüfungsmechanismus von Apple umgehen und lange Überprüfungswartezeiten sowie die Kosten mehrerer Ablehnungen vermeiden. Der standardmäßige Hot-Update-Mechanismus von Cocos basiert nicht auf dem Patch-Paket-Update-Mechanismus. Herkömmliche Hot-Updates generieren häufig Patch-Pakete für mehrere Versionen, laden die Patch-Pakete nacheinander herunter und aktualisieren auf die neueste Version. Der Hot-Update-Mechanismus von Cocos generiert und aktualisiert eine Differenzliste, indem er die neueste Version direkt mit der lokalen Version vergleicht. Cocos Hot Update ÜbersichtManifestBevor Sie das Cocos Hot Update verstehen, müssen Sie zuerst das Manifest verstehen. In Cocos ist Manifest ein Dateiformat und die entsprechende Datei wird als Ressourcenbeschreibungsdatei bezeichnet, die zum Beschreiben der lokal oder remote enthaltenen Ressourcenliste und Ressourcenversion verwendet wird. Das Manifestformat ist dem JSON-Format nachempfunden und die Bedeutungen seiner Schlüsselfelder sind wie folgt: { "packageUrl": lokaler Cache-Stammpfad der Remote-Ressourcen"remoteVersionUrl": [optional] Pfad der Remote-Versionsdatei, wird verwendet, um zu bestimmen, ob es eine neue Version der Ressource auf der Serverseite gibt"remoteManifestUrl": Pfad der Manifestdatei der Remote-Ressource, einschließlich Versionsinformationen und aller Ressourceninformationen"version": Ressourcenversion"engineVersion": Engine-Version"assets": Liste aller Ressourcen"key": relativer Pfad der Ressource (relativ zum Stammverzeichnis der Ressource) "md5": Der MD5-Wert stellt die Versionsinformationen der Ressourcendatei dar. "compressed": [optional] Wenn der Wert true ist, wird die Datei nach dem Herunterladen automatisch dekomprimiert. Derzeit wird nur das ZIP-Komprimierungsformat unterstützt. "size": [optional] Die Bytegröße der Datei, die verwendet wird, um schnell Fortschrittsinformationen abzurufen. "searchPaths": Die Suchpfadliste, die zu FileUtils hinzugefügt werden muss} Die Manifestdatei kann im Hot-Update-Beispiel von Cocos Creator automatisch vom Version Generator-Skript generiert werden. Der Unterschied zwischen Projektressourcen und SpielpaketressourcenWenn Sie ein Cocos Creator-Projekt erstellen, wird darunter ein Assets-Verzeichnis angezeigt, in dem Ihre Szenen, Skripte, Prefabs usw. entsprechend dem Assets-Bereich im Editor gespeichert sind. Diese Projektressourcen entsprechen jedoch nicht den gepackten Ressourcen. Wenn wir das Build-Panel zum Erstellen der nativen Version verwenden, finden wir die Ordner res und src im Build-Verzeichnis. Diese beiden Ordner enthalten die Spielpaketressourcen, die das Spiel tatsächlich ausführen. src enthält alle Skripte und res enthält alle Ressourcen. Daher sollte unser Hot-Update von Ressourcen natürlich die erstellten Ressourcen und nicht das Assets-Verzeichnis des Projekts aktualisieren. In Creator2.4.3 wurde das Ressourcenverwaltungsmodul neu aufgebaut und zur Verwaltung der Ressourcen wurde die Bundle-Modularisierung verwendet. Hier ist eine API, um den Ressourcenpfad über die UUID abzurufen cc.assetmanager.utils.getUrlWithUuid //UUID in URL umwandeln. Die hier zurückgegebene URL ist der Ressourcenpfad im Runtime-Spielpaket SuchpfadeSuchpfadeBevor wir über Hot Updates sprechen, müssen wir das Konzept der Suchpfade verstehen. Wenn wir den Pfad einer Datei beschreiben, geben wir meistens den entsprechenden „relativen Pfad“ basierend auf einem „Stammverzeichnis“ an und schreiben ihn nicht direkt als „absoluten Pfad“. Dies ist für die Wartung und Migration förderlicher. Bei der Spieleentwicklung ist es tatsächlich schwierig, die Sicherheit und Eindeutigkeit unseres „Stammverzeichnisses“ sicherzustellen. Nehmen wir als Beispiel die Hot-Update-Funktion. Wir haben ein Bild. Angenommen, der relative Pfad des entsprechenden Bundle-Verzeichnisses (der Standardwert ist „Ressourcen“) lautet „./png/icon1.png“. Wenn unsere Spielversion aktualisiert wird und das Bild aktualisiert werden muss, können wir das neue Bild nur von einem anderen Ort lesen lassen, da die Ressourcen im Paket nicht beschreibbar sind. Um die Konsistenz des Codes sicherzustellen, müssen die vorherigen relativen Pfade im Code nicht geändert werden, wenn wir das entsprechende „Stammverzeichnis“ ändern können, und das neue Bild kann gefunden werden. Im Creator wird eine Reihe von Suchpfadstrategien verwaltet. Die entsprechenden APIs finden Sie unter jsb.fileUtils.getSearchPaths, jsb.fileUtils.fullPathForFilename usw. Das Prinzip sei hier kurz beschrieben. FileUtils speichert ein Array von „Stammverzeichnissen“. Je niedriger der Index, desto höher die Priorität. Wenn wir bei der Suche nach Ressourcen einen „relativen Pfad“ angeben, wird dieser entsprechend der Priorität des „Stammverzeichnisses“ in searchPaths in einen „absoluten Pfad“ gespleißt, um nach Ressourcen zu suchen. Wenn der Pfad gültig ist und die Datei gefunden wird, wird die Suche beendet. Im Installationsverzeichnis des Spielpakets muss ein Verzeichnis vorhanden sein, in dem die verschiedenen Skripte und Ressourcen gespeichert werden, die wir gepackt haben. Wir nennen es hier das „Spielpaketverzeichnis“. In der Hot-Update-Logik müssen wir ein „Hot-Update-Verzeichnis“ angeben, in dem unsere Hot-Update-Inhalte gespeichert werden. Beide Verzeichnisse sollten als Suchpfade festgelegt werden, und die Versionen müssen so gesteuert werden, dass die entsprechende Suchpfadpriorität umso höher ist, je höher die Priorität des Verzeichnisses ist. Auf diese Weise können wir die neuesten Dateien finden. Im Allgemeinen muss die Priorität des „Hot Change-Verzeichnisses“ höher sein als die des „Spielepaketverzeichnisses“. Grundlegender Hotfix-Prozess von CocosDies ist das Flussdiagramm der offiziellen Cocos-Website. Bitte beachten Sie, dass der aktuelle Vorgang das erste Mal ist, dass der Benutzer nach der Installation der App das Update der Serverversion überprüft. Der vollständige Hot-Update-Prozess wird komplizierter und wir werden ihn später langsam ergänzen. Dieser Artikel hilft Ihnen hauptsächlich dabei, die Prozesslogik des Hot-Updates selbst zu verstehen. Auf Einzelheiten wie die Wiederaufnahme von Haltepunkten, den Download-Fortschritt, gleichzeitige Downloads, Fehlererkennung, Dekomprimierung, Fehlerbehebung und andere Details wird vorerst nicht eingegangen. Daher kann das Flussdiagramm für die Berufung wie folgt zusammengefasst werden: Laden Sie gemäß dem Feld remoteVersionUrl des Manifests im aktuellen Paket die aktuelle Versionsbeschreibungsdatei herunter und vergleichen Sie sie dann mit der lokalen Version. Wenn ein Update erforderlich ist, aktualisieren Sie es auf die entsprechende neueste Version. Andernfalls ist kein Update erforderlich und fahren Sie mit dem nachfolgenden Vorgang fort. Hier müssen wir einige wichtige Punkte genauer analysieren: _localManifest: das Manifest im aktuellen Paket Zunächst sollte im „Spielpaketverzeichnis“ eine Standardmanifestdatei vorhanden sein, die die aktuelle Spielversion beschreibt (das Feld „Version“). Dieses Manifest wird im Allgemeinen aktualisiert, wenn das Spielpaket deinstalliert oder installiert wird. Anschließend wird es im „Hot-Change-Verzeichnis“ auch eine Manifestdatei geben, die die Versionsinformationen unter dem aktuellen Hot-Change-Verzeichnis beschreibt. Bei jedem Start des Spiels sollten wir feststellen, ob das „Spielpaketverzeichnis“ oder das „Hot Change-Verzeichnis“ die neueste Version in der aktuellen Umgebung ist, und die entsprechende Priorität in searchPaths anpassen. Das neuere Manifest wird auch als Manifest im aktuellen Paket bezeichnet und im Code mit _localManifest aufgezeichnet. Fordern Sie zuerst das Remote-Versionsmanifest anIm Feld „remoteVersionUrl“ des Manifests entspricht es der Versionsdatei des Remote-Servers. Hier ist ein Versionsmanifest der offiziellen Demo zu Ihrem Verständnis. { "packageUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/", "remoteManifestUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/project.manifest", "remoteVersionUrl":"http://192.168.50.220:5555/tutorial-hot-update/remote-assets/version.manifest", "Version": "2.0" } Wie Sie oben sehen können, verfügt version.manifest über ein Feld „Version“, das auch die Grundlage für unseren schnellen Versionsvergleich ist. Laden Sie version.manifest herunter und vergleichen Sie es dann mit der lokalen _localManifest-Version, um festzustellen, ob das aktuelle Paket aktualisiert werden muss. Dieser Vorgang wird im Code im Allgemeinen checkUpdate genannt. Die Notwendigkeit temporärer OrdnerDa wir während des Hot-Update-Prozesses mehrere Ressourcen nacheinander herunterladen, treten während dieser Zeit wahrscheinlich verschiedene Probleme auf. Daher benötigen wir einen temporären Ordner, um unsere Downloads vorübergehend zu speichern. Nachdem alle Dateien heruntergeladen wurden, müssen wir auch prüfen, ob die Dateien vollständig sind, bevor wir die alten Ressourcen im „Hot-Update-Verzeichnis“ ersetzen. Laden Sie nicht direkt in das „Hot-Update-Verzeichnis“ herunter. Sobald ein Problem auftritt, können Sie nicht herausfinden, welcher Teil neu und welcher Teil alt ist. Diese Idee lässt sich auch bei der Programmgestaltung anwenden. Bei der Pflege der Daten und Felder, für die wir verantwortlich sind, sollten wir versuchen, diese als Ganzes zu ersetzen und zu aktualisieren, anstatt sie willkürlich zu ändern und Werte zuzuweisen. Heißer ist heißer und differenziertere Dateien. Wie machen wir das? Notieren Sie in der Manifestdatei im Feld „Assets“ die Schlüssel- und MD5-Informationen jeder Ressource. Sie müssen nur die im Remote-_remoteManifest aufgezeichneten Ressourcen vergleichen. Neue Schlüssel sind neu hinzugefügte Ressourcen und Ressourcen ohne Schlüssel müssen gelöscht werden. Dateien mit unterschiedlichen MD5s sind Dateien, die aktualisiert werden müssen. Nachdem die Hitze besser ist, wie man sie wirksam macht Wenn wir neue Ressourcen hinzugefügt haben, wie können wir dafür sorgen, dass diese wirksam werden, ohne den Code anzupassen? Haha, wie ich oben gerade vorgestellt habe, müssen wir nur unsere Suchpfade so anpassen, dass das „Hot Change-Verzeichnis“ eine höhere Priorität hat als das „Spielepaketverzeichnis“. So gehen Sie mit Ressourcen alter Versionen umObwohl das Hot-Update von Cocos eine Differenzdatei ist, zeichnet sein Manifestskript alle Ressourcen des entsprechenden Bundles auf. Wir können wissen, welche Ressourcen nicht mehr benötigt werden. Die Funktion genDiff wurde oben ebenfalls erwähnt, aber ich persönlich denke, dass beim Löschen alter Ressourcen Vorsicht geboten ist. Stellen Sie zumindest sicher, dass die neuen Ressourcen aktualisiert werden, bevor Sie die alten Ressourcen löschen. ZusammenfassenWenn die Leser das oben genannte Wissen verarbeiten und die von Cocos bereitgestellten Grundfunktionen verwenden, können sie ihren eigenen Hot-Update-Prozess vollständig anpassen. Kurz gesagt lädt ein Hot Update die neuesten Remote-Ressourcen herunter, um die vorhandenen Ressourcen im aktuellen Paket zu ersetzen. Beispielsweise können Sie bei einigen kleinen Projekten das gesamte Paket herunterladen und ersetzen und Details wie Versionsvergleich, Suchpfadanpassung, Dateiüberprüfung usw. ignorieren. Oben finden Sie eine umfassende Erläuterung der Details des CocosCreator-Hot-Updates. Weitere Informationen zum CocosCreator-Hot-Update finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Mehrere Möglichkeiten, Python-Programme im Linux-Hintergrund auszuführen
>>: Detailliertes Tutorial zur Installation von Mysql5.7.19 auf Centos7 unter Linux
Inhaltsverzeichnis JS liest Datei FileReader doku...
Inhaltsverzeichnis Vorwort Aktiver Rückzug Ausnah...
Inhaltsverzeichnis 1. Installation und Betrieb vo...
Beginnen wir mit dem Körper: Wenn Sie eine Webseit...
Es ist nicht einfach, die vertikale Zentrierung vo...
<br />Wenn XHTML und CSS nur objektorientier...
Mussten Sie schon einmal sehr große Datenmengen (...
1. Was ist In react Anwendungen werden Ereignisna...
1. Übersicht In diesem Artikel wird das DOCTYPE-E...
bgcolor="Textfarbe" background="Hin...
Wie debuggt man eine Seite auf dem iPad? Wenn Sie ...
In den vorherigen Abschnitten haben wir Aspekte zu...
In der heutigen Entwicklungsumgebung ist schnell ...
Hallo zusammen, ich bin Liang Xu. Sind Sie bei de...
1. Zusätzlich zum Standardport 8080 versuchen wir...