Clase para dibujar Mapas de Tiles:
Notas: La clase carga archivos de texto plano con extensión DTM (Dx_Lib32 TileMap) o una cadena de texto que contenga la información
Enumeraciones
EnumFlag
Colision = 0
Dir_Up = 1
Dir_Right = 2
Dir_Down = 3
Dir_Left = 4
Dir_UP_Right = 5
Dir_Down_Right = 6
Dir_Down_Left = 7
Dir_UP_Left = 8
ZBuffer1 = 9
ZBuffer2 = 10
Flag_1 = 11
Flag_2 = 12
Flag_3 = 13
Flag_4 = 14
Total = 15
Propiedades
Public ReadOnly Property Flag_Tile(ByVal NumFlag As EnumFlag, ByVal Layer As Integer, ByVal PosX As Integer, ByVal PosY As Integer) As Integer
Retorna un valor 1 o 0 que corresponde al Flag asignado al Tile indicando por su posición en tiles dentro del mapa (PosX y PosY) y utilizado por la capa señalada en Layer.
Public ReadOnly Property Flag_Screen(ByVal NumFlag As EnumFlag, ByVal Layer As Integer, ByVal PosX As Long, ByVal PosY As Integer) As Long
Retorna un valor 1 o 0 que corresponde al Flag asignado al Tile indicando por su posición en pixel en la pantalla (PosX y PosY) y utilizado por la capa señalada en Layer.
Public ReadOnly Property Tipo() As String
Retorna el tipo de archivo leído
Public ReadOnly Property Version() As String
Retorna la versión del archivo DTM leido
Public Property CameraX() As Integer
Posición X de la camara
Public Property CameraY() As Integer
Posición Y de la camara
Public Sub SetAlpha(ByVal nAlpha As Integer, ByVal nLayer As Integer)
Setea la transparencia del canal alpha de una la capa "nLayer", 0 = 100% opaca, 255 = 100% transparente
Public Function GetAlpha(ByVal nLayer As Integer) As Integer
Retorna el valor de transparencia del canal alpha de la capa especificada en "nLayer"
Procedimientos
Public Sub Init(ByVal nGFX As dx_GFX_Class, Optional ByVal RutaTileMap As String = "")
Inicializa la clase, es necesario entregarle la referencia a la clase principal de DxLib y la ruta al archivo DTM o la cadena con la información.
Public Sub Draw(Optional ByVal PosX As Long = 0, Optional ByVal PosY As Long = 0, Optional ByVal Z As Long = 0, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 0)
Procedimiento para dibujar el mapa de tiles:
PosX y PosY indican en que lugar de la pantalla se debe dibujar el punto (0,0) del mapa de tile.
Z igual que para la librería, con la excepción que este valor se SUMA con la propiedad Z de los layer. EJ: si un Layer tiene propeidad Z igual a 5 y la función Draw un Z = -2, el Z real donde se dibujar ese Layer será 5 + (-2) = 3.
Transparencia: Igual que en DxLib
Zoom: Permite amplificar el tamaño del mapa.
Public Sub LoadData(ByVal Ruta As String)
Carga un archivo DTM o la cadena con la información a dibujar.
Descargas
TileMap Editor Binario (V 0.3.2) (http://www.deitec.cl/descargas/dxlib32/TileMap_Beta_Binario.rar) (8/2/11)
TileMap Editor código fuente (Sólo para VB6) (http://www.deitec.cl/descargas/dxlib32/TileMap_Editor_VB6.rar) (4/2/10 -Out of Date)
Clase + Demo (VB6) (http://www.deitec.cl/descargas/dxlib32/Demo%20TileMap%20VB6.rar)
Clase + Demo (.NET) (http://www.deitec.cl/descargas/dxlib32/DemoTileMap%20NET.rar)
(http://i45.tinypic.com/mrs46f.jpg)
File size: 237568 bytes
Filetype: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
MD5: c9d272cad25912672129d03d4d2b613d
SHA1: ba61fc4bf4edf429b546276bb888d3e98dfda2eb
¿Qué puede hacer la clase?
La clase se encarga de crear una visualización de un mapa de tile a partir de un modelo que se almacena en archivos de texto plano (.DTM), la clase se encarga de cargar y descargar por si sola las imágenes necesarias.
La clase permite trabajar con Layer (capas) ilimitadas y es posible configurar cada layer de forma independiente al resto en cuando a su posición con la camara, zoom y profundidad (Z), siendo posible componer escenario complejos sin necesidad de tocar el código.
La clase y el editor incluyen un campo que permite agregar un variable de 16 bit como marca (Flag) que puede ser utilizada en la visualización para detectar colisiones u otros valores.
La clase es bastante simple de utilizar y con tan sólo 4 líneas ya es posible visualizar mapas
Dim oTileMap As ClsTileMap
Set oTileMap = new ClsTileMap
...
Call oTileMap.Init(m_gfx, m_System, App.Path & "\mapa.dtm")
...
...
Call oTileMap.Draw(0)
Ejemplos:
Video que muestra un sideScroll con 3 layer con efecto parallax y distinto Zoom
http://www.youtube.com/watch?v=_EQFsUstoZA
Imagen de un escenario con 4 capas, usando el editor y la clase para visualizar el mapa creado
(http://i37.tinypic.com/2mw9og.jpg)
Editor de tiles, agregando Flag al mapa
(http://i45.tinypic.com/2h7nuo1.jpg)
Mapa compuesto de 8 capas y en base a dos imagenes distintas:
(http://i47.tinypic.com/2m2gewn.jpg)
Enhorabuena por el trabajo realizado :)
Para cuando una demo usando el sistema? un mapa tipo Zelda, como en las capturas, que se pueda recorrer con un personajillo, en plan sencillo, vamos, sin llegar a ser un juego en si.
Salu2...
Usando el editor
Para crear un mapa nuevo simplemente se debe abrir el programa, una vez abierto nos vamos al menú "Propiedades -> Tileset" y se abrirá la ventana de las propiedades del mapa. En ella debemos especificar cual será la imagen principal (por defecto será la imagen 0), todas las otras imágenes que usemos en el mapa deben tener el mismo ancho y sólo la imagen principal puede contener información de flag. El tamaño en pixel de cada tile y el tamaño del mapa.
(http://i50.tinypic.com/2lkpldz.jpg)
Para agregar imagenes se usa el menú "Imágenes -> Agregar", la primera imagen será la 0 , la segunda la 1 y así sucesivamente, para seleccionar una imagen en particular se usa el mismo menú "Imagénes".
(http://i47.tinypic.com/2usgc43.jpg)
Por defecto, el sistema crea la capa (Layer 0), la cual aparece al lado derecho, para dibujar sobre el mapa simplemente debemos seleccionar el tile o grupo de tiles que queremos pintar (Clic izquierdo sobre la imagen de la izquierda y arrastramos el mouse para seleccionar un grupo) y luego pintamos haciendo clic sobre el mapa.
Existen 3 herramientas para pintar:
Lápiz: Pinta una vez el tile o grupo de tiles en la posición idicada.
Tarro de pintura: pinta un área cerrada de tiles idénticos del mapa con el tile seleccionado
Goma: Borra los tiles en el mapa
(http://i49.tinypic.com/2epn9tj.jpg)
Para agregar una nueva capa se usa el menú "Layer -> agregar", al final del menú layer se creara un botón con la etiqueta "Layer 1", para trabajar sobre el Layer 1, simplemente pulsamos ese botón (Se volvera verde y además el editor nos indica que layer está activo en la parte inferior izquierda del programa), para modificar las propiedades nos vamos al menú "Layer -> Propiedades" y se desplegara la ventana de propiedades en la cual podemos modificar la imagen que vamos a utilizar para pintar ese Layer, el Z y el Zoom a utilizar, los valores Delta de desplazamiento se utilizan para dar el efeto parallax, ya que determinar cuantos pixel se va a mover el layer por cada pixel que se mueva la cámara.
El campo off set se utiliza para que el layer aparezca desplazado.
(http://i48.tinypic.com/34rj72q.jpg)
Los mapas que se crean con el editor se almacenan con la extensión .MAP y no pueden ser utilizados por la clase, para poder usar el mapa es necesario exportarlo (menú "Proyecto -> Exportar") a .DTM.
PD: Tenía en mente crear un proyecto, pero como no me dedico a dibujar me toma bastante tiempo crear las parte gráficas y además estaba sacando detalles al editor, pero de que se viene un proyecto con estás clases se viene.
Cita de: Hechelion en 07 de Diciembre de 2009, 03:11:17 AM
PD: Tenía en mente crear un proyecto, pero como no me dedico a dibujar me toma bastante tiempo crear las parte gráficas y además estaba sacando detalles al editor, pero de que se viene un proyecto con estás clases se viene.
Yo te diria que te cogieras cualquier sprite de programas como RPG Maker o similares para meter un personaje y el tileset que usas en las capturas, si tampoco se trata de dejarse la piel en una super demo por que seria lo mismo que hacer un juego y no seria necesario para ver en funcionamiento el sistema :)
Salu2...
Acabo de subir una actualización al editor.
V 0.0.1
- Se arregla errores menores al redimencionar los scrolls lateral y vertical.
- Se arreglan errores varios de visualización.
- Se agrega la coordenada del tile bajo el cursor
- Se agrega la capacidad de redimencionar el editor usando el archivo config.ini
Notas sobre la instalación:
El editor de tile, al ser una versión beta se distribuye como código fuente y como binario ejecutable, en la versión binaria no se incluye ningún instalador y es necesario agregar las dependencias a mano, he detectado que al ejecutar el binario bajo win7 (sin tener VB6) el programa pide el archivo comdlg32.ocx, el cual debe estar debidamente registrado (junto con la librería dx_lib32).
Para registrar este componente en Win7 es necesario contar con privilegios de administrador, si el comando lo ejecutan como usuarios normales el archivo no queda bien registrado y el programa no va a correr.
copien el archivo en "c:\windows\system32"
clic derecho sobre la consola de comandos, segunda opción (ejecutar como administrador), y en la consola de comandos escriben:
"regsvr32 c:\windows\system32\comdlg32.ocx"
Cita de: Hechelion en 14 de Diciembre de 2009, 08:11:20 AM
he detectado que al ejecutar el binario bajo win7 (sin tener VB6) el programa pide el archivo comdlg32.ocx, el cual debe estar debidamente registrado (junto con la librería dx_lib32).
Tambien se arreglaria si usaras las funciones DLG_* de la clase dx_System de dx_lib32 para los dialogos abrir y guardar archivo, que tiran directamente contra la API de Windows, no del comdlg32.ocx 0:-) (salvo que estes usando tambien el dialogo de seleccion de color, que tambien podria solucionartelo facilmente y por separado via API de Windows, todo sea por no dejar dependencias molestas por ahi ;) )
Salu2...
Cita de: [EX3] en 14 de Diciembre de 2009, 09:52:37 AM
Tambien se arreglaria si usaras las funciones DLG_* de la clase dx_System de dx_lib32 para los dialogos abrir y guardar archivo, que tiran directamente contra la API de Windows, no del comdlg32.ocx 0:-) (salvo que estes usando tambien el dialogo de seleccion de color, que tambien podria solucionartelo facilmente y por separado via API de Windows, todo sea por no dejar dependencias molestas por ahi ;) )
Salu2...
Pero creo que esa solución obliga a usar esa molesta referencia a la Dx_lib32 :P
Durante la semana hago el cambio, gracias por el dato ;)
Cita de: Hechelion en 14 de Diciembre de 2009, 08:40:17 PM
Pero creo que esa solución obliga a usar esa molesta referencia a la Dx_lib32 :P
Con que referencia molesta, eh? Vale, vale, tomo nota >:D
En serio, a ver si puedo pulir lo de la web (dicese cambiarla por un cms aunque sea un simple blog) para facilitarme el publicar noticias o agregar descargas junto a otro detalle entre manos por que tengo ganas de publicar todo lo desarrollado por vosotros con la libreria, que para 4 gatos programais con ella ni os hago la suficiente publicidad en pago por vuestro esfuerzo, ya me vale, de veras ;)
Salu2...
Buenas nuevamente.
Necesito la ayuda de vuestra inmensa sabiduría.
¿Qué programa recomiendan para crear y editar vídeos?. Con vídeos, hablo de un formato que permita subir a Youtube y colocar de forma fácil comentarios.
Estuve probando con el "Wink" pero tiene la manía de colgarse si la captura dura más de un par de minutos. Como concepto me gusto bastante, la idea de delimitar que zona de la pantalla que vas a capturar y que luego te permita ordenar los fotogramas y agregar comentarios lo encontré genial, pero como les comentaba tiende a caerse, imagino que habrá otros programas similares pero que funcionen bien.
Por cierto, aprovecho de colocar una nueva imagen, está vez junté y la clase de tilemap con la de animaciones y creé una clase para controlar el escenario, permitiendo detectar colisiones, el siguiente paso es programar una clase que calcule el A*.
(http://i46.tinypic.com/wjdvti.jpg)
EDIT
Un video del programa en funcionamiento.
http://www.youtube.com/watch?v=6MQhajvfLM4
Nuevo vídeo, está vez he capturado la creación de un escenario (en realidad de 2) usando el editor y luego como se ve al usar la clase para visualizar y como va tomando forma la parte lógica (colisiones, movimientos, animaciones, etc)
http://www.youtube.com/watch?v=oeT0GbX-ERA
Y un segundo vídeo de 30 segundos donde se aprecia como el motor maneja niveles Z lógicos, dando la posibilidad de crear escenarios un poco más complejos.
http://www.youtube.com/watch?v=6MQhajvfLM4
Actualización del editor de las clases de tilemap a la versión Beta 0.2.0
El editor tiene ahora un selector gráfico para los tile animados.
Se agregó un deshacer de un nivel.
Ahora cada capa tiene su propio canal alpha (La idea la tome prestada a Thorrex 0:-)) el cual se puede manejar desde el editor o en tiempo de ejecución mediante código.
La clases (tanto para VB6 como para NET) se actualizaron para manejar un canal alpha por capa (SetAlpha y GetAlpha), los mapas antiguos son 100% compatibles con los cambios.
Se agregó un nuevo Flag (15) al tilemap que permite retornar el valor completo de flag como un integer.
Qué queda pendiente:
-Poder ajustar la posición de la imagen tileset (la que aparece a la izquierda en el editor).
-Crear un Manual para crear un mapa utilizable.
-¿Mejorar el "undo"?
-¿Asistente gráfico para crear los tile animados?
Excelente Hechelión. Felicitaciones..
CitarAhora cada capa tiene su propio canal alpha (La idea la tome prestada a Thorrex 0:-)) el cual se puede manejar desde el editor o en tiempo de ejecución mediante código.
Me agrada saber que de algo sirvió mi trabajo (?)...
Saludos :)
Hola, perdón por revivir el tema :P pero tengo un problema con el programa xD
al abrir un archivo para editarlo... no me aparecen las imagenes... si nó, q todo rosado y cuadriculado xD
(http://img26.imageshack.us/img26/4528/dibujokrw.jpg)
y... cuando apenas abro el programa, me aparece mas grande la ventana q la resolucion de mi pantalla, y corrida hacia la izquierda...
xD
trabaja a 1440*900 mi monitor xD
Cita de: superbalgas en 08 de Febrero de 2011, 02:56:58 AM
Hola, perdón por revivir el tema :P pero tengo un problema con el programa xD
al abrir un archivo para editarlo... no me aparecen las imagenes... si nó, q todo rosado y cuadriculado xD
y... cuando apenas abro el programa, me aparece mas grande la ventana q la resolucion de mi pantalla, y corrida hacia la izquierda...
xD
trabaja a 1440*900 mi monitor xD
Yo tuve el mismo problema, (recién le había mandado un mail a hechelion:) ).
Lo de la resolución lo arregle desde un archivo configuración sino mal recuerdo, al final sale la resolución.
Width = 1500
Height = 1164
cambia eso por una resolución que quepa en la pantalla, pero lo de las imagenes rosadas aun no se como arreglarlo XD.
La versión del programa que está arriba es de las primeras que subí y hace rato no lo había actualizado, es posible que ese sea el error, acabo de actualizar a la última versión compilada que tengo (Beta 0.2.1). Mañana cuando tenga tiempo, voy a instalar el VB6 y revisar que efectivamente esa sea la útlima versión, si no, les aviso por acá.
Por útlimo y como te dije en el mail, si estás cargando un mapa, es posible que el error sea en las rutas relativas, puedes abrir el archivo del mapa con cualquier editor de texto y revisar la información a mano.
Por último, el programa aún es beta (Por eso el tamaño con que sale, el cual estaba pensado para mi antiguo monitor 1600*1200), en futuras versiones voy a ir mejorando esas caracteristicas, por último, los mapas pueden ser generados con cualquier editor, ya que simplemente son una matriz y luego le puedes agregar la información extra a mano usando un editor de texto. Mañana con más tiempo creo una guía al respecto.
Saludos.
EDIT:
Acabo de compilar y subir la última versión. Beta 0.3.1
Y también va el archivo config.ini donde se puede modificar la resolución, igual la deje configurada en 1024*700 para que sea compatible con más equipos.
Recuerden que el editor es aún beta y tiene algunos detalles, por ejemplo, el deshacer no funciona muy bien, así que no se fien de él (Es un pendiente que aún no termino), por el resto debería funcionar bien, para mover el mapa, arrastran con el clic derecho y recuerden que el tilemap usa la extención MAP y que la clase visualiza mapas en extención DTM.
La diferencia es mínima, pero existe, un DTM está optimizado y cada tile usa un número único y consecutivo, los archivos MAP están pensados para que sea fácil editarlos, los tiles se describen por sus coordenadas, por lo cual el número que identifica cada tile es diferente. El editor les permite exportar los MAP a DTM para cargarlos directo con la clase, pero no he creado ninguna herramienta que hago lo contrario, o sea, cuando creen un escenario no borren el MAP o no podran hacerles cambios con el editor (Siempre se puede editar a mano usando un editor de texto)
ea... gracias ^^ xD
ya funciona mejor :P
aun q tengo una duda... vi en el video
http://www.youtube.com/watch?v=oeT0GbX-ERA
q apenas agregas la imagen-0 te la carga en la parte izquierda... ami me aparece todo rosa cuadriculado xD... pero si selecciono un cuadro, puedo aplicarlo a la derecha...
(http://img109.imageshack.us/img109/6503/dibujoukb.jpg)
segun el acerca de... es la 0.2.1, q es la q acabo de descargar xD
Error mio al subir el último archivo ^_^'
Ahora está arreglado, cuando bajes, debería marcarte la versión 0.3.2 y ahí no deberías tener problemas.
Gracias :P
si supuse q habia pasado eso xD... por eso puse la version q me aparecia xD!...
emmm... ahora cuando vuelva a intentarlo lo bajo xD