Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Lectura De Archivos .TMX
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Lectura De Archivos .TMX 
 
Estoy intentando abrir un fichero del tipo .TMX (los crea el editor de mapas Tiled (http://razonartificial.com/2010/12/...de-mapas-libre/).

Este tiene unas lineas que estan codificadas en base64 y comprimidas en gz.

En gambas3, desde la version 3.2, tenemos herramientas para poder decodificar en base 64, ademas de tener el componente gb.compress, para la descomprimir qzip

En principio se podria hacer, os dejo aqui mi código:

Public Sub Form_Open()
  
  Dim mensajeoriginal As String
  Dim mensajedecodificado As String
  Dim mensajedescomprimido As String
  Dim descomprimirGZ As New Uncompress
  
  Print "*****************Traduccion de .tmx linea decodificada base64 y comprimida ******************"
  
  mensajeoriginal = "eJzt0rENgDAMRcFkE5ZIy7BMSgoKC6VEsoErrn/yd2+tdYCfOgo0wBtsBRqA54xpv4wguyv2rWR3rfriDbO7ovu2Ffuq/h8AAN9xAj4aDOc="

'descomprimo

  mensajedecodificado = UnBase64$(mensajeoriginal)
  descomprimirGZ.type = "zlib"
  mensajedescomprimido = descomprimirGZ.String(mensajedecodificado)
 

'convertir....  
'duda de como hacerlo.....

End


Nota: Como lo que estoy interesado en en "traducir" la linea comprimida, la he copiado en el código de un fichero creado por Tiled Map Editor.

Lo que no se es como traducir la parte de  "convertir" ...

Este es el código que quiero traducir de python:

# Mapas
# ---------------------------------------------------------------------
 
def decodificar(cadena):
    # Decodificar.
    cadena = base64.decodestring(cadena)
    
    # Descomprimir.
    copmressed_stream = StringIO.StringIO(cadena)
    gzipper = gzip.GzipFile(fileobj=copmressed_stream)
    cadena = gzipper.read()
    
    # Convertir.
    salida = []
    for idx in xrange(0, len(cadena), 4):
        val = ord(str(cadena[idx])) | (ord(str(cadena[idx + 1])) << 8) | \
        (ord(str(cadena[idx + 2])) << 16) | (ord(str(cadena[idx + 3])) << 24)
        salida.append(val)
        
    return salida
 


Codigo original de python en: http://razonartificial.com/2010/06/...ndo-el-tileset/

A ver si me podeis echar una mano...

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Lectura De Archivos .TMX 
 
Hola

Partiendo de la base de que no se muy bien para qué es el código (supongo que algo relacionado con mapas en juegos en 2d) y que el código original en python arroja errores al menos con la cadena comprimida que muestras, esto es lo que he podido sacar en claro, pero sin poder comparar los resultados del código original porque como digo, arroja un error de "IOError: Not a gzipped file", o sea, que no es un fichero comprimido.

Código: [Descargar] [Ocultar]
  1. ' gambas class file
  2.  
  3. Private cadena As String = "eJzt0rENgDAMRcFkE5ZIy7BMSgoKC6VEsoErrn/yd2+tdYCfOgo0wBtsBRqA54xpv4wguyv2rWR3rfriDbO7ovu2Ffuq/h8AAN9xAj4aDOc="
  4. Private elobjeto As Object
  5.  
  6. Public Sub form_Open()
  7.  
  8.     elobjeto = convertir()
  9.     Wait
  10.  
  11. End
  12.  
  13. Public Sub convertir() As Integer[]
  14.  
  15.     Dim salida As New Integer[]
  16.     Dim idx, valor As Integer 'val es una palabra reservada en gambas
  17.     Dim descomprimirGZ As New Uncompress
  18.  
  19.     cadena = UnBase64$(cadena)
  20.  
  21.     descomprimirGZ.type = "zlib"
  22.     cadena = descomprimirGZ.String(cadena)
  23.  
  24.     For idx = 0 To Len(cadena) Step 4
  25.         valor = Asc(Mid(cadena, idx + 1, 1)) Or Lsl(Asc(Mid(cadena, idx + 2, 1)), 8) Or Lsl(Asc(Mid(cadena, idx + 3, 1)), 16) Or Lsl(Asc(Mid(cadena, idx + 4, 1)), 24)
  26.         salida.Push(valor)
  27.  
  28.     Next
  29.  
  30.     Return salida
  31.  
  32. End
  33.  
  34.  


"elobjeto" es un array de enteros que contiene valores entre 0 y 256, es decir, que podía haber usado el tipo Byte para almacenarlos, pero sólo es un intento de convertir el código sin saber muy bien la utilidad. La longitud del array es de 1600 elementos, lo que me dice que posiblemente se trata de una rejilla de imágenes de 40x40, correcto?

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Lectura De Archivos .TMX 
 
Perfecto!!! Gracias     

Citar:
supongo que algo relacionado con mapas en juegos en 2d

Si: los arcivos .tmx, son creados por el programa Tiled Map Editor/, es una herramienta muy util para crear mapas en 2D (con perspectivas  ortogonal y isometricas).

Citar:
el código original en python arroja errores al menos con la cadena comprimida que muestras

Puede ser... es un "copia y pega" y se ha podido fastidiar.  

Citar:
lo que me dice que posiblemente se trata de una rejilla de imágenes de 40x40, correcto?

Efectivamente...

Este es un ejemplo que acabo de hacer:


traductortmx

Os dejo aqui el programa como lo tengo ahora.. no traduce completamente el fichero .tmx, pero si la linea comprimida y codificada en base 64.
Dentro de la carpeta "Datos", vereis el archivo original .tmx
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Domingo, 25 Noviembre 2012, 20:16; editado 2 veces 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Lectura Secuencial De Un BMP calcena General 3 Sabado, 14 Abril 2018, 21:57 Ver último mensaje
tincho
No hay nuevos mensajes Lectura De Cadenas Erik Gasca General 8 Lunes, 07 Abril 2014, 16:27 Ver último mensaje
vuott
No hay nuevos mensajes Clases Con Symlink Solo Lectura. tincho General 3 Jueves, 22 Diciembre 2016, 19:10 Ver último mensaje
shordi
No hay nuevos mensajes Lectura De Imagenes Termicas Y Procesarlas estrella_de_galicia Aplicaciones/Fragmentos de Código 2 Domingo, 20 Noviembre 2016, 13:42 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario