Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

19.08.2015, 04:06

C++ | Assets aus Archiven laden

Hi,
ich möchte meine Assets aus einem Archiv laden.
Welche Formate bieten sich dafür an?

Es wäre praktisch, wenn dies einfach zu implementieren wäre.

LG Julien

P.S.: Ich habe einen Blick auf "ZIP" geworfen, jedoch sind die CRC32-Checks etwas abschreckend.
Gibt es ein Tutorial dazu?
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

19.08.2015, 06:42

Es gibt für alles eine lib... auch für zip. :rolleyes:
Die solltest Du nutzen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

19.08.2015, 11:14

Was spricht den zum Beispiel gegen Miniz?
Ich habe damit gute Erfahrungen gemacht.

Wenn es dir nur ums Archiv oder die Kompression geht und weniger speziell um Zip, kannst du die Daten auch einfach selbst mit einem kleinen Inhaltsverzeichnis aus Offsets und Strings hintereinander in eine Datei schreiben und ggf. einzeln mit einer überlegenen Kompressionsroutine(je nach Bedarf schneller oder kleiner) komprimieren. Das ist prinzipiell doch sehr einfach umzusetzen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (19.08.2015, 11:19)


Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

4

21.08.2015, 15:22

Es gibt für alles eine lib... auch für zip. :rolleyes:
Die solltest Du nutzen.


Also ich war bei der Suche nach Zip Libs, die sich in die iostreams von c++ integrieren nicht so richtig fündig geworden.
Es gibt nur wenige Libs die das versprechen und dann hatte es bei mir nie funktioniert.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

21.08.2015, 15:36

Also bei mir gingen die Libs. Schöne Stream-Integration ist allerdings nicht unbedingt immer der Fall, das ist wohl richtig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

21.08.2015, 17:37

Das liegt wohl aber auch daran, dass die IO Streams von C++ ein ganz fürchterliches Interface besitzen.
Für schöne Stream Integration ist selber machen angesagt. Die typische zlib API ist zwar ein wenig komplex aber man kann das durchaus in einen Stream bringen.

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

7

21.08.2015, 17:38

Ich überlege gerade was für mich besser in Frage kommt. ZIP definiert bereits ein "virtuelles Dateisystem", damit hätte ich diesen Punkt bei meiner Game Engine schonmal abgehackt.

Bei mir kommt es zur Zeit zu einem inneren Konflikt. Einerseits weis ich, dass wenn ich eine Library (z.B.zlib) verwende,
dass die Klassen/Funktionen ggf. hinreichend getestet worden sind. Andereseits bin ich jemand, der gerne versteht wie Alles "under the hood" funktioniert und es dann selber implementiert,
was jedoch wieder Zeit kostet und Fehleranfällig ist.

Ich überlege mein weiteres Vorgehen und halte euch auf dem Laufenden.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

8

21.08.2015, 18:31

Ich würde an deiner Stelle auf keinen Fall die Kompressionsroutinen selber schreiben. Das ist alles andere als einfach und nach Möglichkeit soll es auch noch schnell sein und ein Fehler in den komprimierten Daten ist kaum verzeibar.

Allerdings besteht die Möglichkeit, nur das "virtuelle Dateisystem" selbst zu implementieren. "zlib" enthält nämlich keinen Code für Zip, sondern da ist wohl eine zusätzliche Lib oder MiniZ als moderne Alternative notwendig. Dafür brauchst du im Prinzip nur eine Tabelle mit Strings(Dateipfade) und Offsets in die Datei wo die Daten liegen. Das kannst du durchaus für deine Anwendung besser Optimieren als mit Zip und ist eigentlich sehr wenig Aufwand.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

21.08.2015, 18:49

abgehackt
Hacken sind unten am Fuß. Die kann man sogar abhacken. Haken sind die kleinen Teile in Checkboxen. Die kann man an- oder abhaken.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

22.08.2015, 00:13

Erwähnenswert wäre noch PhysicalFS. Das macht vermutlich genau das, wonach du suchst, Julién:

Zitat

PhysicsFS is a library to provide abstract access to various archives. It is intended for use in video games, and the design was somewhat inspired by Quake 3's file subsystem.

Die Library ist in C geschrieben. Es gibt aber auch einen C++-Wrapper, mit dem man u.a. über Streams auf die archivierten Dateien zugreifen kann.

Bisher habe ich PhysicalFS allerdings noch nicht selbst irgendwo eingebaut, sondern nur indirekt in diversen Frameworks verwendet. Ich kann dir also nicht sagen, wie es ist, direkt damit zu arbeiten.

Werbeanzeige