Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Formato Del Fichero De Una Animacion

Iniciado por josette, 09 de Marzo de 2006, 07:50:46 PM

« anterior - próximo »

josette

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



AgeR

 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.

josette

    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é?

rrbenx

 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.
Tap or Die Juego Android Gratis!!
Dungeon break Juego Android Gratis!!
Organic Software
Blog

n3k0

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

AK47

 Yo uso el color (255, 0, 255) como colorkey en todos los gráficos y listos  :ph34r:  

josette

 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?

AK47

 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.

TheAzazel

 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!

josette

 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?

AK47

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

josette

 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.

AK47

 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.

josette


zupervaca

 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.






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.