Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: josette en 09 de Marzo de 2006, 07:50:46 PM

Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 09 de Marzo de 2006, 07:50:46 PM
    Estoy haciendo el formato del fichero de una animacion.

  Dentro de este fichero se especifica el nombre del bitmap donde estan los frames de la animacion. Quiero especificar si el bitmap tiene un color transparente cosa con la que no hay problema. El problema surge cuando quiero cargar un graphico.

En el mini engine que tengo hay dos tipos de recursos graphicos:
Graphic(tileset) y Animation.

A la hora de cargar un graphico puede suceder que tenga tiles que sean transparentes y otros que no.

Que me recomendais:
A) un graphico no puede tener tiles con fondo transparente y sin fondo transparente a la vez. Si es asi, cuando cargo un graphico, he de leer un fichero en donde tenga:
-nombre de la imagen
-[0|1] // indicando si es transparente o no
-[colorkey] // en caso de ser transparente, este es el color de transparente.

B) Si que puede tener de los dos tipos:
¿como puedo leer y guardar la informacion de transparencia para cada tile?. Lo que se me ocurre para esto es. A la hora de renderizar miro si el pixel (0,0) es igual al color que uso para la transparencia. Si es igual a este color -> dibujar transparence, si no dibujar normal. No hay fichero a leer para un graphico, pero he de tener un colorkey global para todos los tiles.

¿¿¿  :huh:  ???


Título: Formato Del Fichero De Una Animacion
Publicado por: AgeR en 09 de Marzo de 2006, 08:10:28 PM
 Allá van algunas ideas:

Solución simple: trata todos los los tiles como si tuvieran transparencia.
Solución compleja: por cada tile ten un booleano indicando si es transparente o no. Sólo deberías comprobarlo al cargar el tileset, recorriendo cada pixel del tile hasta que encuentres uno que tenga color transparente. Si lo encuentras, el tile se dibujará con transparencia, si no, sin transparencia.

Seguro que hay muchas más opciones, pero ahí queda.
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 09 de Marzo de 2006, 08:23:54 PM
    Es una buena opcion, pero he de tener un colorkey global para todas las imágenes y tengo que recorrer todos los pixeles del tile. Que pasa si utilizo un color en algun tile que es el colorKey? Eso se puede controlar por parte de un Grafista?


   Creo que por ahora voy a probar a hacerlo, poniendo los tiles transparentes en una imagen y los tiles no transparentes en otra imagen. Si alguien me da otra idea mejor, pues la adoptaré?
Título: Formato Del Fichero De Una Animacion
Publicado por: rrbenx en 09 de Marzo de 2006, 08:25:43 PM
 Yo les trataría a todos como que tuvieran transparencia, aunque no fuese mucho más compleja la otra opción, si luego tienes que cambiar un tile y añadirle transparencia, simplemente cambias la imagen, no tienes que cambiar el archivo que lo describe.
Título: Formato Del Fichero De Una Animacion
Publicado por: n3k0 en 09 de Marzo de 2006, 09:46:04 PM
 Claro que se puede controlar, me imagino que estarás usando 24 bits mínimos, y si es así practicamente no se aprecia la diferencia de tu colorkey a uno casi igual, cambiando alguno de los valores :).
Título: Formato Del Fichero De Una Animacion
Publicado por: AK47 en 09 de Marzo de 2006, 10:23:34 PM
 Yo uso el color (255, 0, 255) como colorkey en todos los gráficos y listos  :ph34r:  
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 12:34:17 AM
 AK47: ese color es el que uso yo tb  :D .

Voy a probar a pintar todos los tiles como transparentes a ver si no me relentiza mucho.

Aprovecho para preguntar sobre como organizar el fichero de un mapa de tiles o mejor pongo otro post?
Título: Formato Del Fichero De Una Animacion
Publicado por: AK47 en 10 de Marzo de 2006, 09:59:29 AM
 Hombre, si todos los tiles van a ser opacos, igual es interesante pintarlos sin colorkey. También puedes usar dos pasadas, uno para los opacos y otro para los que tengan pixeles transparentes... ¿Cómo diferenciarlos? Pues por ejemplo con un fichero de configuración que diga que a partir del tile X  en el fichero gráfico (bmp, tga o donde sea que guardes los tiles) todos los tiles tienen pixeles transparentes.
Aún así puede que todo esto sea un trabajo inutil. Te recomiendo que hagas diversas pruebas de rendimiento, dibujando tiles con y sin colorkey.
Título: Formato Del Fichero De Una Animacion
Publicado por: TheAzazel en 10 de Marzo de 2006, 10:52:07 AM
 No se que estas usando (como por un sitio pusiste algo del gdiflush(), lo mismo hasta estas hasta con eso de GDI jeje), pero te adeltanto unas directrices generales:

-el colorkey normalmente va como un tiro, SDL por ejemplo soporta compresion RLE y sprites con mucho colorkey van mas rapidos que sin el, ademas, por hardware, las tarjetas aceleran los blit con colorkey. Por lo que por esto no me preocuparia mucho

-alpha, ya sea per surface o per pixel, meeckkk!! es lento, y no hay aceleracion hardware para ello (a no ser que utilices opengl/direct3d en modo 2D o SDL+glSDL), y si ademas creas las surfaces en memoria de video... y estas tienen alpha, vas a ver lo que es lentitud.

pues nada, suerte con el desarrollo!
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 12:24:06 PM
 Jeje, pues si estoy usando GDI, pero solo lo uso como una base para la estructura del engine. Pero de la forma que lo estoy montando la misma estructura que use para gdi podrá ser usada para direcdraw, d3d u opengl, aunque en estos ultimos tal vez tenga que añadir alguna capa que otra a la jerarquía de clases. La intencion es la de si me tengo que poner a hacer algo en opengl o d3d, pues la estrutura, que es lo mas chungo, pues ya la tengo echa.

De echo ya lo tengo implementado para GDI y directDraw y funciona.

Ahora estoy con el rollo de organizar un poco la parte no 'semigraphica' como son los mapas de tiles, los sprites y los npcs.


Por cierto, hay algun editor de mapas de tiles cuyos ficheros puedan ser leidos para usarlos en el engine??


Otra cosa:


el engine tiene 2 objetos: el render y el graphicManager.

entonces un sprite tiene un idAnim, de tal forma que:

idAnim = ngn->getGraphMgr()->loadAnimation(A_Player.txt);

y a la hora de pintar:

ngn->getRender()->drawFrame(idAnim,Point,iSeq,iFrame);

antes de seguir montando, que es mejor: hacerlo por id's o con punteros.

Lo de hacerlo con id's me aporta independencia pero por otro lado cada vez que quiero algo de la animacion tengo que hacer:

Canimation* anim = ngn->getGraphMgr()->get(iAnim);

y como lo tengo montado he de hacer
Canimation* anim = dynamic_cast(
  ngn->getGraphMgr()->get(iAnim)
);

sería recomendable hacer:
Canimation* anim = ngn->getGraphMgr()->get(iAnim,Cresource::RES_ANIMATION);

y hacer el cast dentro en funcion del tipo?
Título: Formato Del Fichero De Una Animacion
Publicado por: AK47 en 10 de Marzo de 2006, 12:40:12 PM
 Mirate el tilestudio o el mappy.
En cuanto a IDs o punteros, siempre puedes usar IDs y cuanto vayas a usarlo mucho, guardar el puntero que le toque ;)
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 01:35:13 PM
 el mappy no me mola, el tilestudio me mola pero no se como coger la informacion del fichero del mapa para leerlo en mi engine.

He visto este otro: http://tiled.rpgdx.net/screenshots.html que no esta nada mal, pero a lo mejor hay otros mejores.

Ambos tienen codigo fuente, pero no es plan de ponerse a retocarlo, aunque no es mala idea.
Título: Formato Del Fichero De Una Animacion
Publicado por: AK47 en 10 de Marzo de 2006, 01:56:09 PM
 En TileStudio puedes definir, con un pequeño script, como se van a guardar los datos en los ficheros, por lo que puedes hacer que el programa grabe en tu propio formato.
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 02:00:49 PM
 son los ficheros tsc?
Título: Formato Del Fichero De Una Animacion
Publicado por: zupervaca en 10 de Marzo de 2006, 02:10:18 PM
 Tambien puedes si quieres usar el dibmaped que hice en csharp a mediados del año pasado, permite seleccionar varios tiles al mismo tiempo para editar el mapa, de forma visual puedes exportar al formato que quieras los datos del mapa, permite varias capas con diferente imagen para los tiles, y algunas chorradas mas, mas que nada fue pensado para hacer mapas para juegos de moviles y por eso la posibilidad de crear tu propio formato de archivo.
El dibmaped esta en un paquete con otras dos utilidades que se llama dibGameMaker, te lo puedes bajar desde aqui http://www.davidib.com/proyectos.asp
Actualmente estoy remodelandolo, pero como estoy liado con otras cosas no tengo mucho tiempo, cuando tenga una version nueva lo pondre por aqui por si a alguien le interesa.
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 02:36:15 PM
 ZUPERVACA: me da un error de ejecucion al hacer doble click.

Tengo que tener algo instalado???
Título: Formato Del Fichero De Una Animacion
Publicado por: AK47 en 10 de Marzo de 2006, 03:45:16 PM
 Si el editor está escrito en C#, necesitas el runtime del .NET. Si lo tienes igual es un problema de versiones. En cuanto a Tile Studio no se que ficheros son, pero eso lo explica en la ayuda o en los tutoriales, creo recordar.
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 04:10:27 PM
 pues no tengo el runtime de .NET.

ok, miraré lo de tilestudio con detenimiento..
Título: Formato Del Fichero De Una Animacion
Publicado por: josette en 10 de Marzo de 2006, 07:30:50 PM
 ok, el tileStudio hay que editar un fichero .tsd en donde especificas que es lo que quieres que salga para cada parámetro del TILSESET y del MAP.

El codigo fuente de este programa está hecho en Pascal. Yo intenté pasarlo a C++ builder. Si alguien se anima a seguir lo que llevo hecho, le paso el codigo.
Lo digo porque el dibujado del mapa va un poco lento y ademas sería interesante añadir funcionalidad para la visualizacion de las capas, para poder seleccionar que capa se ha de mostrar o cual no. asi saber que tiles hay en cada capa.