Programación Específica > Programación de Videojuegos
Dudas Sobre Tiles Animados
Renatus:
Hola a todos :lol: !!!
Soy novato en Allegro/C++ y he estado trabajando con tiles animados.
Me han surgido 3 pequeñas preguntas y agradecería mucho si
pudieran ayudarme.
1- Cuando trabajamos con tiles animados. Qué es mas rápido y eficaz?
Mantener en memoria un solo bitmap con todos los frames dentro para
recortar cada uno de ellos durante cada ciclo del bucle que pinta el
fondo?
O separar cada uno de los frames en un bitmap por separado y hacer
lo mismo?
2 - Cuando se necesita pintar varios tiles animados, por ejemplo para
el agua. Se utiliza una sola variable general para verificar qué frame
específico van a compartir todos esos tiles? Esta variable general también
es utilizada como referencia para saber en que frame están iclusive otros
tiles animados?
3 - Qué utilizan ustedes para realizar las pausas durante cada ciclo del
bucle general? Utilizan rest?
Adjunto una serie de 8 simples tiles que acabo de hacer para una animación
de agua. Estos tiles estan realizados utilizando la paleta de 256 colores
que publiqué hace unos días. No son gran cosa pero... :rolleyes:
Muchas Gracias. Nos vemos :hola: !!!
txutxi:
Hola Renatus, parece que estamos "trabajando en lo mismo". Los tiles animados es lo ultimo que he desarrollado, te explico como lo hago yo.
He programado una estructura llamara TileSet, cada una contiene un array con tiles separados (en respuesta a lo que preguntabas acerca de mantenerlos juntos y recortar o tenerlos ya por separado, aunque no se si será más eficiente, pero a mi me resulta más cómodo). Un campo de esta estructura decide si contiene tiles animados o tiles simples, si este campo dice que son animados, le da sentido a otros campos de la estructura que son frame, numFrames, t y tFrame, y estos campos tiene este significado:
frame: la secuencia en la que se encuentra la animacion
numFrames: numero maximo de frames de la animacion (como es un campo comun para todos los tiles de la estructura, esta estructura contendra animaciones de un total de numFrames)
tFrame: numero de "flips" que deben hacerse de pantalla antes de que incremente el frame de la animacion (la velocidad de la animacion no solo dependerá de esto, va relacionada obviamente con los FPS que hayamos establecido en el entorno)
t: cuantos flips de pantalla llevamos (cuando llegue a tFrame incrementaremos el frame y volvera a valer0)
A parte de esto a cada tile digamos que le doy un valor, incluso a cada uno de los tiles dentro de una animacion... imagina que tengo una animacion de una antorcha, en la pantalla se verian todas las antorchas iguales.... no necesariamente, dependiendo del valor de referencia con el que se haya dibujado en pantalla; si la animacion de la antorcha va de los valores 1 al 4, puedo dibujar dos antorchas en pantalla que se vean en fases diferentes, una la dibujas con el 1 y otra con el 3, despues de animarse tendran valores 2 y 4, luego 3 y 1... etc
Espero que te haya servido, te dejo una pagina interesantisima, seguro que aqui lo explica mejor que yo :P:
http://www.vjuegos.org/modules.php?name=Content
métete en la seccion manipulacion de objetos ya veras....
Un saludo !
txutxi:
Ah por cierto te quería hacer una pregunta...
por qué prefieres trabajar con 256 colores? yo he empezado hace poco y lo hago con 16 bits en vez de con 8, asi no tengo que complicarme la vida :P. Pero me gustaría saber las ventajas, supongo que un juego quizá gane en velocidad si trabaja con menos colores... no vayas a tomarlo a mal, lo respeto mucho, y más fijandome en aquellos juegazos de snes como el ff6, som3, que bonitos! y con tan pocos colores.
En fin un saludo jeje !
Enko:
--- Citar ---por qué prefieres trabajar con 256 colores?
--- Fin de la cita ---
En los juegos 2D, no creo que hay necesidad de tener mas de 256, porque es muy raro que haya que tener instantaneamete en la pantalla mas de esa cantidad. El problema es tener bien controlada la paleta para que segun cada escena cambie los colores y ya.
Ademas, al tener una cierta paleta, es como que los graficos del juego toman personalidad.
Actualmente en el juego que estoy haciendo uso resolucion de color de 16 bit pero en realidad, los graficos, no creo que superen los 256 colores.
PD> El juego Diablo usa tan solo 256 colores y no parece eso. Realmente han podido tener un buen control sobre la paleta.
JuanK:
--- Cita de: "Renatus" ---1- Cuando trabajamos con tiles animados. Qué es mas rápido y eficaz?
Mantener en memoria un solo bitmap con todos los frames dentro para
recortar cada uno de ellos durante cada ciclo del bucle que pinta el
fondo?
O separar cada uno de los frames en un bitmap por separado y hacer
lo mismo?
--- Fin de la cita ---
Lo más eficiente para ahorrar memoria es tener todo ( en la medida de lo posible) en un solo BMP, desde que este no supere dos megas, una recomendacion es que si tus tiles son muchos los hagas en bmps agrupados..
ejemplo un bmp con cosas de agua otro con cosas de fuego otras de metal etc.
--- Cita de: "Renatus" ---2 - Cuando se necesita pintar varios tiles animados, por ejemplo para
el agua. Se utiliza una sola variable general para verificar qué frame
específico van a compartir todos esos tiles? Esta variable general también
es utilizada como referencia para saber en que frame están iclusive otros
tiles animados?
--- Fin de la cita ---
Podria ser , todo depende de como tu lo hagas, no existe una regla que te diga como debes usar los tiles, cada cual es libre de hacer su propia implementacion.
--- Cita de: "Renatus" ---3 - Qué utilizan ustedes para realizar las pausas durante cada ciclo del
bucle general? Utilizan rest?
--- Fin de la cita ---
Podria funcionar, sin embargo lo mejor seria aprender a usar las funciones del temporizador avanzadas que trae allegro.
--- Cita de: "txutxi" ---He programado una estructura llamara TileSet, cada una contiene un array con tiles separados (en respuesta a lo que preguntabas acerca de mantenerlos juntos y recortar o tenerlos ya por separado, aunque no se si será más eficiente, pero a mi me resulta más cómodo).
--- Fin de la cita ---
Una alternativa muy eficiente , que yo uso,
es colocar todo dentro de un solo BMP, agrupando como lo dije enteriormente,
luego para poder acceder a las diferentes secciones del BMP creo un arreglo, pero no un arreglo de imagenes sino un arreglo de rectangulos, donde cada rectangulo me indica cual es la posicion y tamaño del cuadro que voy a dibujar del bmp.
Un ejemplo seria mas o menos asi:
--- Código: Text --- while...blit(GRANBMP, x, y, reactangulo[recuadroactual]->x, rectanglo[recuadroactual]->y, rectangulo[recuadroactual]->ancho, erctangulo[]->alto);...recuadroactual++;...
Respecto a lo de los colores.. que les puedo decir....
Si yo fuera un genio del arte grafico o al menos tuviera talento.... usaria imagenes de 256 colores nada más...
Pero...
como no lo soy uso imagenes de 24 bit o en su defecto de 16 aunque lo malo de las de 16 es que los desvanecimientos o mejor los difuminados.. o como le llamen no se ven muy bien, salvo que seas un artista o que tengas talento....
Navegación
[#] Página Siguiente
Ir a la versión completa