ludica-squamata / mano-gift

Proyecto de engine para el juego, usando pygame.
0 stars 0 forks source link

El savegame file debería guardar el sprite del heroe #132

Open danielrossyamitrano opened 6 years ago

danielrossyamitrano commented 6 years ago

Se me ocurre que el archivo de salvado debería incluir el sprite del héroe, especialmente si dicho sprite, en un futuro, permite ser creado (custom) o si el equipo del héroe modifica el sprite (#104).

danielrossyamitrano commented 3 years ago

Estaba viendo que python puede "guardar" (léase, serializar) usando pickle, lo que convierte a los datos en un formato binario. No se puede guardar un surface directamente, pero en mis pruebas tengo un par de funciones que pueden guardar imagenes como archivos pkl junto con otros datos (en principio, sus dimensiones, pero podría incluir muchos metadatos más). Una imagen de 32x32 de un solo color pesa, guardada en png,1Kb. En PKL con solo esa metadata pesa 6 veces más, pero se puede guardar todo en un solo archivo, y dice la documentación de python que se puede comprimir luego de serializar.

einacio commented 3 years ago

Como que no se puede guardar un surface directamente? esto que es entonces? https://github.com/danielrossyamitrano/_mis_pruebas/blob/dfab0d66e299a74bd7715b8aa75fda506680b095/extract/extract.py#L32

Tambien podes usar image.tostring y image.fromstring para serializar y deserializar https://www.pygame.org/docs/ref/image.html#pygame.image.tostring aunque tendrias que pasarlo por un compresor ahi

On Wed, Jun 2, 2021 at 4:54 AM Daniel @.***> wrote:

Estaba viendo que python puede "guardar" (léase, serializar) usando pickle, lo que convierte a los datos en un formato binario. No se puede guardar un surface directamente, pero en mis pruebas https://github.com/danielrossyamitrano/_mis_pruebas/tree/master/pkl tengo un par de funciones que pueden guardar imagenes como archivos pkl junto con otros datos (en principio, sus dimensiones, pero podría incluir muchos metadatos más). Una imagen de 32x32 de un solo color pesa, guardada en png,1Kb. En PKL con solo esa metadata pesa 6 veces más, pero se puede guardar todo en un solo archivo, y dice la documentación de python que se puede comprimir luego de serializar.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ludica-squamata/mano-gift/issues/132#issuecomment-852674350, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALWRIVOMJC47N3F27SP2M3TQWMOFANCNFSM4FFX2ARQ .

danielrossyamitrano commented 3 years ago

Como que no se puede guardar un surface directamente? esto que es entonces?

Me refiero a que no se puede serializar directamente a un archivo pkl. Lo intenté y el resultado fue "can't pickle (pygame.surface)". Ese link que me pasas guarda imagenes como imagenes. No me refiero a producir nuevas imagenes más un json que linkee todo, sino a guardar todo (imagenes + data + metadata) en único archivo.

einacio commented 3 years ago

Cual es la diferencia? el contenido de un archivo es solo un string. con tostring() podes simplemente agregarlo en tu savefile. con save() podes guardar en un archivo temporal y leer el contenido en tu savefile como imagedata

On Wed, Jun 2, 2021 at 4:32 PM Daniel @.***> wrote:

Como que no se puede guardar un surface directamente? esto que es entonces? Me refiero a que no se puede serializar directamente a un archivo pkl. Lo intenté y el resultado fue "can't picke (pygame.surface)". Ese link que me pasas guarda imagenes como imagenes. No me refiero a producir nuevas imagenes, sino a guardar todo (imagenes + data + metadata) en único archivo.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/ludica-squamata/mano-gift/issues/132#issuecomment-853079331, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALWRIVJ24A3OWX3N2K2U6TTQY6HZANCNFSM4FFX2ARQ .

einacio commented 3 years ago

Algo asi tambien

f = io.BytesIO()
image.save_extended(surf, f, "a.png")
infoJson = {"height": 32, "width": 32, "image": str(f.getvalue())}
f = io.BytesIO(bytes(infoJson["image"]))
surf = image.load_extended(f, "a.png")

On Wed, Jun 2, 2021 at 4:38 PM Pablo Alviggi @.***> wrote:

Cual es la diferencia? el contenido de un archivo es solo un string. con tostring() podes simplemente agregarlo en tu savefile. con save() podes guardar en un archivo temporal y leer el contenido en tu savefile como imagedata

On Wed, Jun 2, 2021 at 4:32 PM Daniel @.***> wrote:

Como que no se puede guardar un surface directamente? esto que es entonces? Me refiero a que no se puede serializar directamente a un archivo pkl. Lo intenté y el resultado fue "can't picke (pygame.surface)". Ese link que me pasas guarda imagenes como imagenes. No me refiero a producir nuevas imagenes, sino a guardar todo (imagenes + data + metadata) en único archivo.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/ludica-squamata/mano-gift/issues/132#issuecomment-853079331, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALWRIVJ24A3OWX3N2K2U6TTQY6HZANCNFSM4FFX2ARQ .

danielrossyamitrano commented 3 years ago

Se me hace que guardar un json con la data de la imagen haría al json muy grande y dificil de leer (algo así pasaba con los palotes del mapa "casas y árboles" antes de que existieran las estructuras 3D.

einacio commented 3 years ago

json es solo un concepto, no se que tipo de archivo tenias pensado para la serializacion. para el caso que sea un json no significa que alguien lo tenga que leer, es un formato de serializacion nomas

On Wed, Jun 2, 2021 at 4:59 PM Daniel @.***> wrote:

Se me hace que guardar un json con la data de la imagen haría al json muy grande y dificil de leer (algo así pasaba con los palotes del mapa "casas y árboles" antes de que existieran las estructuras 3D.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/ludica-squamata/mano-gift/issues/132#issuecomment-853101260, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALWRIRNXXSDH7B73UM5OMDTQZBMRANCNFSM4FFX2ARQ .

danielrossyamitrano commented 3 years ago

Quisiera evitar JSON como formato porque es muy limitado para algunas cosas. Y sobre el formato, pickle no guarda con una extensión específica, pero se le suele dar la extención .pkl para distinguirlos.