¿Gente que haya trabajado con NFlib?. Dudas.

Lo primero de todo: Feliz año nuevo.

Veamos. Estoy con el proyecto de fin de carrera y consiste en coger un juego ya hecho por otros alumnos y cambiarlo de Palib a NFlib, y ya de paso hacerle una nueva interfaz. De momento tengo 3 dudas que me gustaría que me aclaraseis.

1) Le he metido un splash (la pantalla empieza en negro y poco a poco se ilumina con el efecto fade in hasta que se ve el logo, y segundos después empieza el fade out para dejarlo a oscuras otra vez). Después de eso viene el cambio de "habitación" (no diré "pantalla" porque puede ser confuso), así que hago el NF_ResetTiledBgBuffer() para borrar y luego hago el setBrightness para iluminar la pantalla porque se ha quedado a oscuras con el fade out.

Después de eso vendría otro menú en el que estoy trabajando; en este punto esperaba que la pantalla estuviese limpia pero resulta que el logo anterior sigue ahí. ¿No se supone que el reset lo borraría?, ¿o a pesar de haber borrado el logo queda ahí porque ya está dibujado?. ¿Se tiene que quitar todo lo de la pantalla con el DeleteTiledBg() (así sí que se quita)?. El Reset es para la ram, ¿pero qué pasa con la vram?. ¿También hay que borrar de ahí?.

2) Entre muchos sprites tengo una flecha de 16x16 con color magenta en los píxeles donde no hay flecha. Los cargo y todo bien, lo que es la magenta no se colorea como tal, sino que es transparente. Mi duda es: ¿si pulso en el area de la magenta con el stylus será como pulsar en la fecha o esto ya está implementado y no hará nada?.

3) No entiendo el concepto de los tiles. ¿Alguna explicación sencilla?.

Gracias de antemano.
1) Para borrarlo de la pantalla tienes que borrarlo de la VRAM, si quieres eliminarlo por completo, pues lo borras de VRAM y RAM.

Un ejemplo de gestión es cargar sprites en RAM y conforme necesitas ir pasando en VRAM, creando y borrando en VRAM, dejando la RAM intacta a operaciones de borrado y tal, no se si me sigues.

2)Si el sprite es de 16x16, la "colisión" del mismo es de 16x16, aunque sea casi por completo magenta. Si quieres una colisión más precisa, pues tendrás que reducir el tamaño de la colisión.

3) No se, no he tocado apenas tiles, aquí no puedo ayudarte.

Un saludo y feliz año nuevo.
nazareth escribió:1) Para borrarlo de la pantalla tienes que borrarlo de la VRAM, si quieres eliminarlo por completo, pues lo borras de VRAM y RAM.

Un ejemplo de gestión es cargar sprites en RAM y conforme necesitas ir pasando en VRAM, creando y borrando en VRAM, dejando la RAM intacta a operaciones de borrado y tal, no se si me sigues.

2)Si el sprite es de 16x16, la "colisión" del mismo es de 16x16, aunque sea casi por completo magenta. Si quieres una colisión más precisa, pues tendrás que reducir el tamaño de la colisión.

3) No se, no he tocado apenas tiles, aquí no puedo ayudarte.

Un saludo y feliz año nuevo.
1) Entiendo tu sugerencia. Mi pregunta es, ¿hay alguna función para borrar todo lo que hay en la VRAM, como el NF_DeleteTiledBg() para la RAM?. Ayer estuve leyendo el manual y no recuerdo. Sería muy cómodo para pasar de un menú a otro.

2) ¿Estamos hablando de CMAPS?, es que no entiendo muy bien el concepto de colisión. Igual lo más simple es ajustar el tamaño de los botones a la resolución, dejando como mucho una linea por arriba y por abajo para la magenta.

Gracias.
pasabaporaquí escribió:
nazareth escribió:1) Para borrarlo de la pantalla tienes que borrarlo de la VRAM, si quieres eliminarlo por completo, pues lo borras de VRAM y RAM.

Un ejemplo de gestión es cargar sprites en RAM y conforme necesitas ir pasando en VRAM, creando y borrando en VRAM, dejando la RAM intacta a operaciones de borrado y tal, no se si me sigues.

2)Si el sprite es de 16x16, la "colisión" del mismo es de 16x16, aunque sea casi por completo magenta. Si quieres una colisión más precisa, pues tendrás que reducir el tamaño de la colisión.

3) No se, no he tocado apenas tiles, aquí no puedo ayudarte.

Un saludo y feliz año nuevo.
1) Entiendo tu sugerencia. Mi pregunta es, ¿hay alguna función para borrar todo lo que hay en la VRAM, como el NF_DeleteTiledBg() para la RAM?. Ayer estuve leyendo el manual y no recuerdo. Sería muy cómodo para pasar de un menú a otro.

2) ¿Estamos hablando de CMAPS?, es que no entiendo muy bien el concepto de colisión. Igual lo más simple es ajustar el tamaño de los botones a la resolución, dejando como mucho una linea por arriba y por abajo para la magenta.

Gracias.
1) No recuerdo función, pero una hay seguro, para borrar de VRAM, diría que DeleteTiledBg es para VRAM...

2) No, nada de CMAPS, hablo de que si tu sprite es de 16x16 y por ejemplo, tienes que pinchar en el, y tu sprite es, digamos, 8x16, dejando otro 8x16 de magenta, podrias hacer algo tipo... si la posicion del stylus respecto a este sprite estan dentro de los margenes de la posición del sprite, se cumpla tal cosa, siendo ese limite, por ejemplo SPRITE_X y SPRITE_X + 16, que sería todo el sprite, pues puedes reducir el tamaño, SPRITE_X y SPRITE_X + 8, así cogerías en colisión solo tu dibujo de 8x16, dejando el resto de 8x16 de magenta sin colisión, no se si me sigues.
nazareth escribió:
pasabaporaquí escribió:
nazareth escribió:1) Para borrarlo de la pantalla tienes que borrarlo de la VRAM, si quieres eliminarlo por completo, pues lo borras de VRAM y RAM.

Un ejemplo de gestión es cargar sprites en RAM y conforme necesitas ir pasando en VRAM, creando y borrando en VRAM, dejando la RAM intacta a operaciones de borrado y tal, no se si me sigues.

2)Si el sprite es de 16x16, la "colisión" del mismo es de 16x16, aunque sea casi por completo magenta. Si quieres una colisión más precisa, pues tendrás que reducir el tamaño de la colisión.

3) No se, no he tocado apenas tiles, aquí no puedo ayudarte.

Un saludo y feliz año nuevo.
1) Entiendo tu sugerencia. Mi pregunta es, ¿hay alguna función para borrar todo lo que hay en la VRAM, como el NF_DeleteTiledBg() para la RAM?. Ayer estuve leyendo el manual y no recuerdo. Sería muy cómodo para pasar de un menú a otro.

2) ¿Estamos hablando de CMAPS?, es que no entiendo muy bien el concepto de colisión. Igual lo más simple es ajustar el tamaño de los botones a la resolución, dejando como mucho una linea por arriba y por abajo para la magenta.

Gracias.
1) No recuerdo función, pero una hay seguro, para borrar de VRAM, diría que DeleteTiledBg es para VRAM...

2) No, nada de CMAPS, hablo de que si tu sprite es de 16x16 y por ejemplo, tienes que pinchar en el, y tu sprite es, digamos, 8x16, dejando otro 8x16 de magenta, podrias hacer algo tipo... si la posicion del stylus respecto a este sprite estan dentro de los margenes de la posición del sprite, se cumpla tal cosa, siendo ese limite, por ejemplo SPRITE_X y SPRITE_X + 16, que sería todo el sprite, pues puedes reducir el tamaño, SPRITE_X y SPRITE_X + 8, así cogerías en colisión solo tu dibujo de 8x16, dejando el resto de 8x16 de magenta sin colisión, no se si me sigues.
1) Sí, esa función es la que borra de la VRAM. El caso es que esa función solo borra un sprite por comando, así que me preguntaba a ver si existe otra función que las borre todas a la vez como lo hace el NF_ResetTiledBgBuffers() como con la RAM. Porque claro, si cargo muchos sprites tengo que hacerlo uno por uno...

2) Creo que entiendo lo que quieres decir, pero entonces tendría que estar mirando las dimensiones de todos los sprites y desarrollar una función de clickeo por cada sprite. Me da a mí que tiene que haber algo implementado que mire si lo clickeado es magenta para ignorarlo, me parece una función demasiado básica como para que falte.
Por basica que te parezca, verificar si lo que tocas es un pixel magenta o no, consume una cantidad ingente de recursos, por lo que es mejor que cada uno lo adapte a lo que necesite, de hecho, NFlib es una libreria grafica basicamente, con soporte para mapas de colision, todo lo demas, como sonido, entrada, etc, se hace directamente con libnds. Para colisiones, lo mejor es hacerlas con areas rectangulares, es laborioso, por que lo tienes que hacer a mano, pero vamos, los recursos no abundan y yo en 5 años no me se ha roto nada por hacerlo asi.
Para borrar la VRAM de fondos o Sprites, simplemente, vuelve a inicializar el sistema de ambos, que lo primero que hace es limpiar la memoria entera.
KnightFox escribió:Por basica que te parezca, verificar si lo que tocas es un pixel magenta o no, consume una cantidad ingente de recursos, por lo que es mejor que cada uno lo adapte a lo que necesite, de hecho, NFlib es una libreria grafica basicamente, con soporte para mapas de colision, todo lo demas, como sonido, entrada, etc, se hace directamente con libnds. Para colisiones, lo mejor es hacerlas con areas rectangulares, es laborioso, por que lo tienes que hacer a mano, pero vamos, los recursos no abundan y yo en 5 años no me se ha roto nada por hacerlo asi.
Para borrar la VRAM de fondos o Sprites, simplemente, vuelve a inicializar el sistema de ambos, que lo primero que hace es limpiar la memoria entera.
Jo, qué nivel, me contesta el autor y todo [ayay]

¿Entonces cuando cambie de habitación uso NF_ResetTiledBgBuffers() y NF_ResetSpriteBuffers() para vaciar la RAM y NF_InitTiledBgSys() y NF_InitSpriteSys() para borrar la VRAM y fuera?

Ya que estamos, ¿algún tutorial para la pantalla táctil (Stylus)?. He estado mirando el pdf y no viene nada, y con lo poco que he encontrado en internet tampoco he conseguido nada (soy un manta [buuuaaaa])
Mirate los ejemplos de la lib, el de demo/reveal usa el stylus.
7 respuestas