Ich entwickle ein Spiel wie Age of Empire (Gebäude auf der Karte) und für jedes Gebäude habe ich ein Sprite Sheet für dessen Animation. Ich benutze Frame für Frame-Animation, um das Gebäude zu animieren (keine andere Methode ist mir sowieso bekannt). Ich bemerke, dass mein Ressourcenordner aufgrund der Bilder, die ich darin ablege, extrem groß wird.
Wie halten Spiele wie CoC und Age of Empires ihre apk-Größe unter 50 Mg? Vermisse ich hier etwas, wenn es um Spieleentwicklung geht?
Vielen Dank
EDIT: Weitere Informationen zu dem Problem, mit dem ich konfrontiert bin
Ich habe eine Menge Animationen Drawables Objekte. Ich habe diesen Weg gewählt, weil er am schnellsten war und die gewünschten Ergebnisse lieferte. Grundsätzlich ist jedes Gebäude eine Animation, in der sich die XML-Datei auf 8 Zeichen bezieht (8 Bilder = 8 Dateien). Alle von ihnen sind PNG wegen der Transparenz. Da ich über 200 Bilder habe, beträgt die Apk-Größe 120 MB (und ich bin noch nicht mit dem Kopieren der Hälfte der Dateien fertig). Das ist es, worauf es ankommt, es muss einen Weg geben, es zu lösen. Bitte unterstützen Sie einen Mitentwickler
Antworten:
Aus Ihrer Frage geht nicht hervor, ob Sie wirklich Techniken kennen möchten, mit denen Spiele Speicherplatz sparen können, selbst wenn große Mengen an umfangreichen Bild- / Ressourcendateien vorhanden sind (das ist der Kern der Frage), oder ob Sie nur wissen möchten, ob Es gibt weniger Möglichkeiten, Animationen für Ihre Gebäude zu erstellen, da weniger Speicherplatz benötigt wird (dies wird durch den Titel Ihrer Frage impliziert).
Also, ich werde diese Antwort hier einfügen und versuchen, Ihnen in Bezug auf Platzersparnis zu helfen, wenn Sie viele Bilder haben. Wenn Sie nur Informationen zu Animationstechniken benötigen, mit denen Sie möglicherweise Speicherplatz sparen können, teilen Sie mir dies bitte mit, damit ich die Antwort löschen kann.
In einer ähnlichen Situation gab es jedoch zwei Lösungen, die ich gesehen (und einmal verwendet) habe, um Speicherplatz auf der Festplatte zu sparen:
1) um einzelne Bilder innerhalb eines Bildes zu verketten. Manchmal kann es hilfreich sein. Anstatt also 4 separate Dateien für jedes der folgenden farbigen Quadrate zu speichern, speichere ich alle nebeneinander im selben Bild (und teile sie nur über den Spielcode auf):
In diesem Beispiel beträgt das Speichern in 4 verschiedenen PNG-Dateien 1255 Bytes, während die einzelne Datei mit allen verketteten 451 Bytes beträgt. Wie viel es helfen kann, hängt natürlich von Fall zu Fall ab, und Sie sollten testen, ob dies je nach Ihren Bildern hilfreich sein kann.
2) um den Ressourcenordner zu komprimieren. Dies kann oft sehr hilfreich sein, um Speicherplatz zu sparen. Wenn das Spiel ausgeführt wird, können Sie das gewünschte Bild entweder dekomprimieren oder aus der komprimierten Datei ziehen - abhängig vom verwendeten Komprimierungsformat. Sehen Sie sich die Antwort der Vergangenheit an, die zu einem Wiki dieser Website wurde: /gamedev//a/37649/72423
Beachten Sie jedoch auch, dass jede Art der Komprimierung je nach verwendetem Bilddateityp mehr oder weniger vorteilhaft sein kann : Vermeiden Sie die doppelte Komprimierung von Ressourcen
Weitere Informationen zur Komprimierung: Stand der Technik bei der Bildkomprimierung?
Schließlich könnten Sie sich auch überlegen, welche Bildtypen für die jeweilige Situation verwendet werden sollen: Welches Bildformat ist speichereffizienter: PNG, JPEG oder GIF?
quelle
Ich würde vorschlagen, dass Sie TexturePacker versuchen
Verwenden Sie ein Spieleentwicklungs-Framework wie AndEngine, Cocos2d-x oder LibGdx? => Keine
Müssen alle Bilder gleichzeitig geladen werden? Es hört sich so an, als würden Sie auf den Zielgeräten auf massive RAM-Probleme stoßen.
Update: Snake hat mir ein paar Bilder geschickt. Wie versprochen, werden sie hier nicht veröffentlicht. Deshalb habe ich selbst einige Kunstwerke geschaffen, um zu demonstrieren, wie der Speicherverbrauch reduziert werden kann.
Im Originalbild bewegte sich nur ein Teil des Bildes. Ich habe einen Vogel auf ein Haus gesetzt, um dies zu demonstrieren:
Grundsätzlich ist das Packen der gesamten Animation auf ein Blatt eine große Verschwendung von Speicher. Sie sollten statische und bewegliche Teile aufteilen:
Statisch:
Anim01:
Anim02:
Behalten Sie die ursprüngliche Position des Vogels in den Bildern . Deshalb gibt es so mich leeren Raum oben. Sie benötigen dies zum Ausrichten der Animation.
Ziehen Sie nun die Bilder auf TexturePacker und wählen Sie die folgenden Parameter aus
Das Ergebnis ist, dass Sie jetzt 2 Dateien erhalten: Das Sprite-Sheet und eine JSON-Beschreibungsdatei.
Die wichtigen Teile sind Frame und SpriteSourceSize .
Der Rahmen gibt Ihnen die Position des ursprünglichen Sprites im Sprite-Sheet an.
spriteSourceSize gibt den Versatz für das Zeichnen des Bildes an - die Teile des Bildes, die aufgrund des Zuschneidens ausgelassen werden:
Eine einfache Pseudo-Code-Zeichenroutine sieht folgendermaßen aus:
Möglicherweise müssen Sie die Versatzberechnung abhängig vom Drehpunkt / Ursprung in Ihrem Grafiksystem anpassen. Die obige Routine setzt ein Koordinatensystem voraus, dessen Ursprung oben links liegt.
Dann zeichnen Sie das Haus einfach in 2 Durchgängen:
Sie müssen sich nicht um die Offsets kümmern, da die Bilder bereits ausgerichtet sind.
quelle
Hier sind einige Zeiger, die Sie verwenden können
Ich hoffe, diese Hinweise helfen
PS: Ich gebe nur eine verallgemeinerte Vorstellung, da mir Ihr genauer Spielinhalt und Ihre Entschuldigung nicht bekannt sind, wenn diese Hinweise nicht nützlich sind
quelle
Viele Spiele behalten ihre grafischen Ressourcen nicht in der .apk-Datei. Sie enthalten nur die "Grundlagen" wie UI-Grafiken und den Spielcode und laden den Rest der Assets herunter, sobald das Spiel installiert ist. Dies gilt insbesondere für Spiele, die abhängig von der Auflösung Ihres Displays unterschiedliche Grafikressourcen verwenden, um zu verhindern, dass die APK-Datei sowohl Assets mit niedriger als auch mit hoher Auflösung enthalten muss.
Sie sollten sich sowohl die Optimierungsoptionen der anderen Antwortenden als auch die Frage ansehen, ob Sie die Grafiken Ihres Spiels letztendlich getrennt von der .apk-Datei selbst bereitstellen müssen.
quelle
Ich bin auf diese Site gekommen, um eine ähnliche Frage zu finden, und es gibt in der Tat einige gute Ressourcen, die sowohl in den Antworten auf Ihre Frage als auch in anderen Fragen aufgeführt sind.
Sie sollten sich wahrscheinlich 2D-Animationen ansehen : Animierte 3D-Modelle oder Sprites mit Animationsrahmen? für einige Debatten über verschiedene Arten von Animationen. Es hat mir geholfen, mein Spiel zu optimieren. Außerdem teilen Sie uns nicht mit, welche API Sie verwenden oder welche Engine Sie verwenden. Das alleine kann schon einen Unterschied machen: Android Frame für Frame PNG Animation
Bedenken Sie außerdem, dass es bei der Komprimierung wichtige Unterschiede zwischen den Komprimierungsmethoden geben kann. Insbesondere gibt es einige Unterschiede zwischen den Komprimierungsarten und es gibt einige spezielle Debatten darüber, welche Route für Mobilgeräte am besten geeignet ist. Insbesondere wenn Sie berücksichtigen, dass für mobile Geräte auch die RAM-Auslastung und die CPU-Verschwendung beim Laden von größter Bedeutung sind. Siehe: http://www.gamasutra.com/blogs/AlexandruVoica/20130419/190833/Why_efficiency_is_key_in_texture_compression_standards_for_mobile_graphics.php?print=1
quelle