Tras haber visto que muchos usuarios lo indicaban, estoy trabajando en mejores ejemplos de uso de los bitarrays en CPCtelera (Arrays de tipos de datos inferiores al byte).
Para empezar, he creado un ejemplo de cómo definir un Tilemap completo usando 1-bit por tile y modificarlo en ejecución (con un minieditor). Tenéis todo el código del ejemplo en Github. La parte más interesante es el fichero map.c, donde se ve cómo definir manualmente el bitarray y modificarlo en ejecución. Aquí os dejo un vídeo y el dsk por si queréis probarlo.
Podríais decirme si el código os parece entendible? Quiero crear más ejemplos, pero necesito saber qué dudas generan y si se entienden bien o no.
En CPCtelera tenéis disponibles funciones para manejar arrays de bits, de 2 bits, de 4 bits y de 6 bits (este último añadido recientemente).
Ejemplo de Tilemap con BitArrays en CPCtelera
- AmstradGamer
- Forero habitual
- Mensajes: 189
- Registrado: Dom 08 Jun , 2014 10:08 am
Re: Ejemplo de Tilemap con BitArrays en CPCtelera
Para mi es difícil saber si lo entiendo del todo bien sin meterme a pelearme de verdad con el código, pero a priori, parece que se entiende.
Parece interesante utilizar bits en lugar de u8s para definir mapas de tiles, siempre y cuando tengas menos de 256 tiles diferentes (que son muchos), para ahorrar espacio en la definición de los mismos.
Gracias por los ejemplos, son muy útiles.
Parece interesante utilizar bits en lugar de u8s para definir mapas de tiles, siempre y cuando tengas menos de 256 tiles diferentes (que son muchos), para ahorrar espacio en la definición de los mismos.
Gracias por los ejemplos, son muy útiles.
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Ejemplo de Tilemap con BitArrays en CPCtelera
No hay de qué, para eso estamos .
Si en algún momento tienes un rato para revisar el código en más detalle y tienes dudas, pregúntame. Las dudas es justo lo que necesito saber para mejorar los ejemplos.
Si en algún momento tienes un rato para revisar el código en más detalle y tienes dudas, pregúntame. Las dudas es justo lo que necesito saber para mejorar los ejemplos.
- AmstradGamer
- Forero habitual
- Mensajes: 189
- Registrado: Dom 08 Jun , 2014 10:08 am
Re: Ejemplo de Tilemap con BitArrays en CPCtelera
He vuelto a este hilo, porque estoy empezando a pelearme con mapas de tiles y no sé cual es la aproximación que debo darle al tema.
He mirado tanto este hilo como el ejemplo de scroll por hardware que usa tiles de GnG.
Lo que quiero hacer es ponerle un fondo basado en tiles a Space Moves. En dicho juego para pintar el suelo tengo un array de unos 1000 bytes, donde indico donde hay suelo, extremos de suelo y agujeros (entre otras cosas, como los enemigos).
A la hora de pintar, en realidad pinto dos filas de tiles, porque sé que tile va debajo de cada cual y así me ahorro los 1000 bytes de la fila inferior de tiles.
Ahora bien, si quiero poner más filas para poner un fondo sobre el suelo, digamos por ejemplo que paso de tener de 1 (ó 2) a 4 ó 6 filas de tiles. En teoría si diseño el mapa usando Tiled, que es mi idea viendo el ejemplo del GnG, tendría un array de 6 * 1000 posiciones. Eso son aproximadamente 6KB en RAM, que aunque los comprima, tendré que usar en crudo y por lo tanto necesitaré ese espacio.
Si en lugar de usar bytes para la definición de tiles uso arrays de bits, obviamente la cosa ocupará sustancialmente menos, pero tengo dudas sobre si debería utilizar una aproximación así o bien, seguro, hay maneras mejor de conseguir esto. También se me plantea el cómo pasar de un fichero de Tiled a un array de bits, en lugar de un array de bytes. Obviamente podría programarme una utilidad para ello.
Como es evidente que esto se la ha tenido que plantear mucha gente muchas veces antes que yo, ¿qué opciones tengo?
Muchas gracias.
He mirado tanto este hilo como el ejemplo de scroll por hardware que usa tiles de GnG.
Lo que quiero hacer es ponerle un fondo basado en tiles a Space Moves. En dicho juego para pintar el suelo tengo un array de unos 1000 bytes, donde indico donde hay suelo, extremos de suelo y agujeros (entre otras cosas, como los enemigos).
A la hora de pintar, en realidad pinto dos filas de tiles, porque sé que tile va debajo de cada cual y así me ahorro los 1000 bytes de la fila inferior de tiles.
Ahora bien, si quiero poner más filas para poner un fondo sobre el suelo, digamos por ejemplo que paso de tener de 1 (ó 2) a 4 ó 6 filas de tiles. En teoría si diseño el mapa usando Tiled, que es mi idea viendo el ejemplo del GnG, tendría un array de 6 * 1000 posiciones. Eso son aproximadamente 6KB en RAM, que aunque los comprima, tendré que usar en crudo y por lo tanto necesitaré ese espacio.
Si en lugar de usar bytes para la definición de tiles uso arrays de bits, obviamente la cosa ocupará sustancialmente menos, pero tengo dudas sobre si debería utilizar una aproximación así o bien, seguro, hay maneras mejor de conseguir esto. También se me plantea el cómo pasar de un fichero de Tiled a un array de bits, en lugar de un array de bytes. Obviamente podría programarme una utilidad para ello.
Como es evidente que esto se la ha tenido que plantear mucha gente muchas veces antes que yo, ¿qué opciones tengo?
Muchas gracias.
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Ejemplo de Tilemap con BitArrays en CPCtelera
La mejor opción posible sería tener desarrollados los easyTileMaps con soporte para bitarrays. Cuando empecé a desarrollar los easyTileMaps diseñé una opción para poder configurar funciones propias de obtención de tiles, lo que permitiría usar bitarrays. Sin embargo, esa parte aún está sólo en el limbo del diseño.
Las opciones, a priori, son:
Las opciones, a priori, son:
- Utilizar bitarrays y montar el sistema de pintado de tiles en pantalla ad-hoc. Creo que es la más conveniente si quieres optimizarlo para tu caso.
- Utilizar bitarrays combinado con un tilemap en memoria que vayas modificando conforme "descomprimes" del bitarray. Más cómodo, pero probablemente mucho más lento y poco flexible para tu caso.
- Comprimir el mapa a trozos de modo que sólo tengas descomprimido uno o dos trozos en cada momento en memoria y puedas anticiparte descomprimiendo el siguiente cuando se esté llegando.
- AmstradGamer
- Forero habitual
- Mensajes: 189
- Registrado: Dom 08 Jun , 2014 10:08 am
Re: Ejemplo de Tilemap con BitArrays en CPCtelera
Gracias por la respuesta y propuestas.
Creo que iré a por la primera de ellas que es lo que tenía en mente y me parece lo más cómodo. Si uso compresión será más bien para descomprimir los diferentes mapas de tiles de los diferentes niveles.
¡Me pongo a ello!
Creo que iré a por la primera de ellas que es lo que tenía en mente y me parece lo más cómodo. Si uso compresión será más bien para descomprimir los diferentes mapas de tiles de los diferentes niveles.
¡Me pongo a ello!
¿Quién está conectado?
Usuarios navegando por este Foro: Bing [Bot]
La Comunidad Española |