Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Clase TileMap + Editor

Iniciado por Hechelion, 07 de Diciembre de 2009, 12:45:40 AM

« anterior - próximo »

Hechelion

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) (8/2/11)
TileMap Editor código fuente (Sólo para VB6) (4/2/10 -Out of Date)
Clase + Demo (VB6)
Clase + Demo (.NET)


File size:     237568 bytes
Filetype:    PE32 executable for MS Windows (GUI) Intel 80386 32-bit
MD5:    c9d272cad25912672129d03d4d2b613d
SHA1:    ba61fc4bf4edf429b546276bb888d3e98dfda2eb

Hechelion

#1
¿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
Código (vb) [Seleccionar]

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


Editor de tiles, agregando Flag al mapa


Mapa compuesto de 8 capas y en base a dos imagenes distintas:

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

#3
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.



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".



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



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.



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.


[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

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"

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

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 ;)

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

#9
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*.




EDIT
Un video del programa en funcionamiento.
http://www.youtube.com/watch?v=6MQhajvfLM4

Hechelion

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


Hechelion

#11
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?

Thorrex

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 :)

superbalgas

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

Nekkit

#14
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.
7th layer errors, u cant avoid them

www.nksvc.net






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.