Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM

Título: lo de los mapas :P
Publicado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM
                                pues la duda era que si conoceis alguna clase/ocx/loqusea para crear mapas de un solo bitmap arrastrando "tiles" anteriormente creados (no se si me explico) La cuestion es ir colocando los diferentes tiles en un mapa en blanco y que se pueda exportar el mapa creado como un solo bmp.

Gracias de nuevo
PD: se me olvidaba... uso VC++ y directx :ojo:                                
Título: lo de los mapas :P
Publicado por: Kabila en 01 de Enero de 1970, 01:00:00 AM
                                si lo que quieres es compactar bitmaps unitarios en una pagina, que mejor que el photoshop que te auna la paleta........

                               
Título: lo de los mapas :P
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                Lo puedes hacer con la clase CDC de las MFC. Por ejemplo, puedes crear en bitmap en blanco con la función CreateDIBSection y luego ir pegandole trocitos con la función CDC:BitBlt. Puede parecer que estas funciones son muy lentas ya que forman parte de la GDI de windows, pero he probado algunas cosillas y son muy muy rápidas... De todas formas al crear el bitmap en blanco con CreateDIBSection obtienes un puntero al principio de ese bitmap, con lo que en un momento dado podrias modificar directamente los pixels en ensamblador...

un saludo                                
Título: lo de los mapas :P
Publicado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM
                                Gracias por responder a los dos.

En cuanto a lo que dices Kabila, en parte tienes razon pero no me sirve de mucho, ya que la idea es hacer un mapa de 40x40 tiles lo que hace un total de 1600 tiles a colocar con photoshop en los pixeles exactos para que correspondan con la matriz[40][40] de datos de la programacion.Ademas la idea seria crear esta matriz a la vez que la imagen.

Y en cuanto a lo que me comenta fiero esta misma tarde lo pruebo y te cuento que tal me ha funcionado :ojo:                                
Título: lo de los mapas :P
Publicado por: [Over] en 01 de Enero de 1970, 01:00:00 AM
                                Hola.

Si conoces las dx 8, tardarias pocas horas en hacerte una aplicación para eso que tu mismo dices. Si tu idea es crear un bmp del tamaño de todos los tiles juntos, no es mas que crear una funcion que te lea un tile y lo copie en una surface previamente creada (con el tamaño correspodiente),guardas la posicion dentro de la surface del ultimo pixel dibujado y asi con todos los tiles, ya segun como queires dibujarlo, en filas y columnas, todos en una fila, etc.. Si queires guardar un array con las posiciones de la textura(tile),cuando termines de dibujarlo en la surface, podrias conseguirlo. Si usas dx 8 te puedo postear las rutinas que leen y escribe sobre surfaces. Chao.                                
Título: lo de los mapas :P
Publicado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM
                                holas de nuevo,
Eso que dices [Over] tiene bastante sentido :ojo: pero por lo que creo entender eso serviria unicamente para conseguir el array de posiciones o tambien se crearia el archivo bmp del mapa/sprite?.
La verdad es que aun estoy confuso sobre como quiero hacer los mapas para el jueguecillo cutre que quiero hacer. El dilema es si utilizar un unico bmp (grande) con todo el mapa o tener los titles y cargarlos por trozos en una unica surface por trozos (BitBlt)teniendo previamente guardadas las posiciones de cada uno.
El jueguecillo seria tipo comecocos y los mapas no seria excesivamente grandes (1200x1200 aprox).

Acepto cualquier sugerencia al respecto asi como cualquier codigo que me pueda servir :sonriendo:

Puedes postearlo aqui o enviarmelo a mi mail nakels@able.es

Gracias again                                
Título: lo de los mapas :P
Publicado por: [Over] en 01 de Enero de 1970, 01:00:00 AM
                                Hola.

Pues si tu idea es usar otra version de dx e incluso otra API, lo que yo conozco no te sirve, aun asi,se haria mas o menos de la misma forma, creas una surface (el futuro bmp) del tamaño de todos los sprites que vayas a dibujar, vas leyendo los sprites y escribiendo estos datos (pixeles) en la surface creada, cuando termines, podras guardar esa surface en un fichero (bmp) y asi tendrias un bmp con todos los pequeños bmp anteriores juntos. Con dx8 si lo he hecho, pero al ser una version integrada el 2d/3d muchas funciones han cambiado mucho. Chao.                                
Título: lo de los mapas :P
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                Cuesta un poco entenderos a ambos ^_^'

A ver: si vas a hacer un comecocos, con x tiles de n*n lo que imagino que pretendes decir es que tienes x tiles en BMP y quieres hacer con ellos el mapa del juego.

Lo que no he llegado a deducir es lo del mapa. La forma "tradicional" de usar tiles para mapeado sería tener los tiles como ficheros de datos (compactados en uno sólo si quieres o como resource en el mismo ejecutable o como quieras...) y un array en alguna parte que te da el mapa en función de los tiles. Para dibujar el mapa simplemente vas recorriendo el array y dibujando los tiles en pantalla.

Es decir, si tienes un array tal como este:



int mapa[40][40]={

                  { 0,0,0,0,0,0,.... },

                  { 0,1,1,1,1,1,.... },

                  { 0,1,0,1,0,0,.... },

                  { 0,1,0,1,0,0,.... },

                  ...

                }



lo que haces es, simplemente



for( x = 0; x < 40; x++)

 for( y = 0; y < 40; y++)

      DibujaTile( mapa[y][x], x, y);



donde DibujaTile básicamente hace esto



x_out = x * horizontal_tile_size + x_offset;

y_out = y * vertical_tile_size + y_offset;



DibujaBMP( BMP_Salida, Tile[mapa[y][x]], x_out, y_out );



(suponiendo que horizontal_tile_size y vertical_tile_size contienen el tamaño del tile y x_offset e y_offset el desplazamiento del mapa. Aunque si no haces scroll puedes obviar los desplazamientos)

La función DibujaBMP como tal no existe en Windows, pero hay otra pràcticamente igual que recibe los mismos parámetros (o casi) No recuerdo el nombre exacto pero es fácil de encontrar en la MSDN. La idea es que BMP_Salida es el Bitmap del área cliente de la aplicación y Tile[] es un array con los tiles BMP que forman el mapa.

Para lo que quieres hacer no utilizaría DirectX ( por lo menos la versión 8 ) Te será mucho más fácil utilizando los recursos hiperantiguos del Windows como el BitBlt() y demás...

Sync :guay:

[ Este Mensaje fue editado por: synchrnzr el 2002-09-26 19:56 ]                                
Título: lo de los mapas :P
Publicado por: nostromo en 01 de Enero de 1970, 01:00:00 AM
                                Nakeis:
Por lo que estoy viendo quieres hacer un juego basado en "tilemaps", que es como se suele llamar a esa tecnica de crear mapas 2d. He estado viendo las respuestas sobre crear un bmp hasta que me he dado cuenta de que lo que quieres es hacer un juego con la tecnica "tilemap".

En principio te dire que eso de crear un bitmap(surface o bmp) a partir de trozos (bitmaps mas pequeños) para crear el mapa y luego escribirlo en pantalla es una tecnica mala y que a la larga no te va a llevar a ningun lado.
Me explico, no quiero decir que la idea de trabajar con "tiles"(los trozos del mapa) sea mala, lo que digo es que para hacerlo de una manera eficiente tu tienes que tener:
1. los tiles (digamos de 16x16pixeles) un vector(o array unidimensional)
2. el tilemap que seria un array bidimensional con los indices de los tiles.
3. una rutina que vuelque un tilemap en concreto a la pantalla directamente.
De esta forma que te he indicado te aprovechas de que los tiles (que se repiten a lo largo del tilemap) estan en memoria y al utilizarlos mucho beneficia a la cache con lo que va más rapido el asunto.

Para crear los mapas(tilemaps) bien hace falta un buen editor de mapas, tilemaps o como sea, que normalmente se lo hace uno a su gusto.

En fin, no se si he liado más la cosa :sonriendo:

Un saludo                                
Título: lo de los mapas :P
Publicado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM
                                hola a todos.
Bueno, bueno ya voy viendo por donde van los tiros...

Por lo que he entendido creo q seria mejor cargar el mapa dentro del juego tile a tile en una misma surface en vez de cargar todo el bmp. Eso por un lado.

Entonces "lo unico" que tengo que currarme es un programita a parte que guarde la matriz de datos que forma el mapa en si, esto es, en que posicion va cada tile, si se puede andar por el o si hay un objeto...lo que synchrnzr ha puesto como una matriz [40][40] con unos y ceros :ojo: el como colocarlos despues y todo eso lo comprendo.

Bueno muchas gracias a todos, intentare probar un par de cosillas que tengo en mente y en un par de dias os cuento.                                
Título: lo de los mapas :P
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                Bueno, dado el tamaño de tus mapas yo no me complicaría mucho y editaría los vectores a mano, que puede que acabes antes ^_^'

Lo de la matriz que proponía era sólo para tener almacenados los tiles que corresponden a cada posición, pero también la puedes utilizar para determinar el camino por donde puede ir el comecocos como bien dices.

Hace un tiempo hice un remake del clásico comecocos de Greg Kuperberg (creo que acabo de matar a su apellido XDDD) para el proyecto de final de CFGS de mi novia y dado que los espacios por donde podía pasar el comecocos coincidia con uno de los tiles, pos simplemente ande había el tile 0 se podía pasar y donde había otros tiles no XDDD

En este editamos el vector "mapa" a mano en un momento y sin mucha complicación, incluso editamos a mano los bitmaps también :sonriendo:

(Qué tiempos aquellos del BC++ 3.1 ¿verdad sés? XDDD)

Sync                                
Título: lo de los mapas :P
Publicado por: NaKelS en 01 de Enero de 1970, 01:00:00 AM
                                Bueno creo q algo he avanzado, ayer hice un programita (mas simple que un sidral) en VC++ derivado de la clase scrollview donde al principio es todo negro(todo pared) y donde voy colocando cuadraditos blancos que seria el camino.
un click boton derecho -> camino, cuadrado blanco
un click boton izquierdo -> pared, cuadrado negro
Doble click izquierdo -> Objeto en el camino, cuadrado rojo
Doble click derecho ->posicion inicial monstruo

total que en la matriz guardo un 0 para pared, 50 para camino, 100 para objeto y 150 para monstruo.

Cuando termino paso la matriz a un fichero y creo que ya esta. :sonriendo:

Solo me queda probar que desde el juego me lea el fichero y vaya colocando los tiles bien en la surface :lengua: ¿Que funcion me recomendais para eso? Blt?                                
Título: lo de los mapas :P
Publicado por: Mars Attacks en 01 de Enero de 1970, 01:00:00 AM
                               
Citar
El 2002-09-27 14:21, synchrnzr escribió:
Bueno, dado el tamaño de tus mapas yo no me complicaría mucho y editaría los vectores a mano, que puede que acabes antes ^_^'

Oye, no es lo que midan, es cómo los use XDDDDD                                
Título: Rutinas de Over
Publicado por: bnl en 08 de Octubre de 2002, 11:20:11 AM
                                Hola
Over yo estoy interesado en esas rutinas que tienes para dibujar en surfaces con las Direct 8 y luego mostrar la surface en pantalla. Te agradeceria mucho q las postearas.
Saludos