Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





lo de los mapas :P

Iniciado por NaKelS, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

NaKelS

                                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:                                

Kabila

                                si lo que quieres es compactar bitmaps unitarios en una pagina, que mejor que el photoshop que te auna la paleta........

                               

fiero

                                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                                
www.videopanoramas.com Videopanoramas 3D player

NaKelS

                                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:                                

[Over]

                                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.                                

NaKelS

                                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                                

[Over]

                                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.                                

synchrnzr

                                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 ]                                

nostromo

                                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                                

NaKelS

                                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.                                

synchrnzr

                                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                                

NaKelS

                                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?                                

Mars Attacks

                               
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                                

bnl

                                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                                
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.






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.