Anuncios Google

NFlib básico ( Día 3 )

Tutoriales avanzados de Homebrewes

Día 3

En los días anteriores aprendimos a crear fondos, sprites y a cargar las fuentes de texto para escribir en pantalla, pero no aprendimos como escribir texto en pantalla, en este tutorial trataremos los Cmaps(o mapas de colisiones)escribir texto en pantalla y varias cosas mas. Primero aprenderemos a usar el texto debidamente, simplemente lo básico, nada mas. Luego entraremos de lleno en la programacion de juegos para aprender algo que es muy importante, los mapas de colisiones, los cuales nos ayudarán a crear las colisiones de nuestro juego sin usar un banco de mapas para estos.

Mostrar textos es una cosa realmente facil, aunque a los acostumbrados a PAlib puede parecerles una bobada una de las cosas que hay que hacer es mas de lo que pensais.

Lo primero que debemos de hacer es iniciar los fondos tileados como ya os enseñé en el primer tutorial. Después crear las capas de texto en el fondo 0(arriba del todo) y luego simplemente escribir y actualizar la pantalla con los datos del texto.

Para hacer esto debemos de conocer primero dos funciones:

NF_WriteText(pantalla, capa, x, y, "texto");

Con esta funcion escribimos el texto en la variable. Como sabeis pantalla siempre es 1 ó 0, capa es 0, 1, 2 ó 3(recomiendo el uso de la 0, puesto que es la mas alta). X e Y son posiciones, pero no en píxeles, como viene siendo en muchas de las funciones que hemos visto, si no que esta vez miden los Tiles los cuales nos desplazamos para escribir el texto en pantalla. Un tile son 8 pixeles en el eje Y e 8 píxeles en el eje X. Los tiles son mas conocidos por la facilidad que brindan para hacer mapas sin necesidad de tener un fondo específico para esto. Aunque tienen también otras muchas aplicaciones hoy los tiles solo nos servirán para los mapas de colisiones y para el texto. En un futuro nos podrían servir para algo más. "texto" es una simple cadena de texto que debe de ir entre comillas (" ")por obligacion, puesto que si no lo identificará como variable y dará error al compilar.

NF_UpdateTextLayers();

Esto lo que hace es actualizar los tiles de la capa en la que has elejido crear el texto anteriormente y escribir estos en la pantalla para que se muestren al usuario. Esta ultima funcion es esencial, puesto que sin ella los textos no se verán ni por asomo.

Aquí os dejo un ejemplo con todo completo el cual os puede ayudar a entender el como van los textos:

// Includes c/c++
#include <stdio.h>
 
// Includes propietarios NDS
#include <nds.h>
 
// Includes librerias propias
#include <nf_lib.h>
 
int main(void) {
	NF_SetRootFolder("NITROFS");//Elegimos nitrofiles como carpeta inicial
	NF_Set2D(1, 0);//Inicio el sistema de 2D inferior
	NF_Set2D(0, 0);//Inicio el sistema de 2D superior
	NF_InitTiledBgBuffers();//Inicio los bufers de los fondos tileados
	NF_InitTiledBgSys(1);//Inicio el sistema de fondos inferior
	NF_InitTiledBgSys(0);//Inicio el sistema de fondos superior
	NF_InitTextSys(0);//Inicio el sistema de texto superior
	NF_InitTextSys(1);//Inicio el sistema de texto inferior
	NF_LoadTextFont("fnt/default", "normal", 256, 256, 0);//Cargo la primera fuente
	NF_LoadTextFont("fnt/default", "normal1", 256, 256, 0);//Cargo la segunda fuente
	NF_CreateTextLayer(0, 0, 0,"normal");//Paso la fuente a la pantalla superior
	NF_CreateTextLayer(1, 0, 0,"normal1");//Paso la fuente a la pantalla inferior
	NF_WriteText(0, 0, 0, 0, "Hola mundo!");
	NF_UpdateTextLayers();
	// Bucle (repite para siempre)
	while(1) {
		swiWaitForVBlank();//Espero al sincronismo vertical
	}
 
	return 0; 
 
}

OJO: Para los textos es obligatorio iniciar primero el sistema de fondos Tileados, puesto que los textos se dibujan como estos.

Para limpiar una capa de texto es tan sencillo como llamar a la funcion:

NF_ClearTextLayer(pantalla, capa);

Recordad pantalla es 1 ó 0 y capa es 0, 1, 2 ó 3. No hace falta decir que capa depende de donde creasteis la capa de texto y pantalla de la pantalla en la que está creada.

Despues de saber esto último vamos a empezar con los Cmaps(o mapas de colisiones).

CMAPS:

Un mapa de colisiones no es ni mas ni menos que una imagen con varios colores que representa por donde puede y por donde no puede pasar un sprite o personaje que elijamos.

Normalmente se usan en conjunto con los fondos de los niveles para dotar de paredes a estos y así crear un juego con algo mas de calidad. Tambien se pueden usar para otras cosas, pero eso ya es vuestra imaginacion la que lo decide. Un mapa de colisiones está representado por tiles(cuadros de 8 x 8 píxeles)y como tal debemos de respetar estos limites a la hora de usar dos o mas colores para estos.

NFlib tiene funciones para manejar estos mapas de colisiones(o CMAPS)sin tener que usar un fondo de la DS(PAlib no tiene funciones para esto último). Hoy vamos a aprender lo básico, como crear un CMAP y como cargarlo con NFlib para detectar colisiones.

 

Para crear un mapa de colisiones debemos de tener en cuenta una cosa. Cada mapa tiene en la primera línea de tiles un tile de cada color ordenados correctamente. Os preguntareis, ¿para que es esa línea? pues esa línea lo que hace es decirle a NFlib cuantos colores estamos usando en el mapa de colisiones así como el numero que tiene que devolver cuando queramos saber que tile hay en cierta posición X e Y.

Un mapa de colisiones puede ser algo parecido a esto:

Click en la imagen para agrandar

 

Como podeis observar en la primera linea hay un tile de cada color, como ya he dicho antes eso le indica a NFlib que número devolver cuando queremos saber que tile existe en un punto concreto de X e Y.

Para convertir las imagenes a CMAPS debemos de copiar la imagen a la carpeta bmp del GRIT y luego ejecutar el archivo Convert_CMAPS.bat. Si todo ha ido bien en la carpeta cmaps se debe de haber creado un archivo con el mismo nombre que la imagen y en formato .cmp. Cabe destacar que NFlib, a diferencia de PAlib simplifica la tarea de trabajar con tiles, puesto que NFlib permite el uso de coordenadas en píxeles para leer los datos del mapa de colisiones.

Una vez echo esto creamos una carpeta llamada cmp dentro de nitrofiles y pegamos hay nuestro archivo .cmp. Ahora os preguntareis, ¿como los cargamos y los usamos en nuestro juego?:

Para poder empezar a usar los cmap primero deberemos de inicializar su correspondiente buffer con la función:

NF_InitCmapBuffers();

Si ya los tenemos iniciados y simplemente queremos borrar los datos de la RAM debemos de usar esto:

NF_ResetCmapBuffers();

Para cargar los mapas de colisiones necesitamos usar esta simple y sencilla función:

NF_LoadColisionMap(archivo, numero_de_cmap, ancho, alto);

Donde archivo es la ruta dentro de nitrofiles al archivo cmp. numero_de_cmap puede ser cualquier numero del 0 al 255, este número sirve para identificar estos cmap mas facilmente. Por último debemos de especificar el ancho y el alto en píxeles de nuestro mapa de colisiones.

Si ya tenemos
un cmap cargado y lo que queremos hacer es eliminarlo de la RAM bastará
con usar esto:

NF_UnloadColisionMap(numero_de_cmap);

Donde numero_de_cmap es el numero del mapa de colisiones el cual ya hemos cargado antes.

Vale, ahora que sabeis como cargar estos mapas llega la hora de aprender a leerlos.

La única funcion que nos puede servir es esta:

NF_GetTile(numero_de_cmap, x, y);

Donde numero_de_cmap es el numero que usamos para crear el mapa y X e Y son los pixeles en la cual queremos saber que tile hay. Esta funcion devuelve el numero de tileset el cual se ha definido en la primera linea del cmap.

Tambien existe una manera de cambiar su informacion para, en un determinado momento poner un objeto estático en medio de un camino. Solo necesitamos saber 4 cosas, las coordenadas en X e Y, el tile el cual queremos poner(de la primera linea del cmap) y el numero de CMAP que queremos editar. Esta es la funcion:

NF_SetTile( numero_del_cmap, x, y, numero_de_tile);

No hace falta que os deje un ejemplo puesto que creo que esto es mas facil incluso que los fondos. Si veo que no sabeis usarlo gustosamente añadiré un ejemplo.

Y esto es todo en este tutorial, recordad re-leerlo varias veces, puesto que leerlo solo una vez no sirve de nada.

4.354165
Tu voto: Ninguno Votos totales: 4.4 (48 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de _-jose-_

Duda sobre CMAPS

¿Cómo hago para hacer los cmaps usando mis gráficos? es decir, que salgan los gráficos como quiera.

Imagen de Roboron3042

No acabo de comprenderte

¿Te refieres a los colores del CMAP? En este caso sólo tienes que añadir un tile del color que vayas a utilizar a la línea de arriba.

¿Te refieres a los gráficos que salen en la pantalla? Los CMAPS NO se muestran en pantalla, lo que se muestra en la pantalla es el fondo que quieras.

Imagen de _-jose-_

Entonces

Primero hago un nivel con paint, y luego edito el archivo diciendo el color de cada tile, eso si, pero lo malo es que no sé lo que tengo que hacer con grit para convertir mi nivel (no los colores de cada tile)

Por cierto, he visto que has echo tutos de nflib en un foro, me han servido un poco de ayuda. gracias.


Consolas: DS, WII, 3DS.

Juegos 3DS: Super mario 3D Land, Mario Kart 7, One Piece Unlimited Cruise SP y Sonic Generations

Eshop: Pullblox, Mario vs Donkey Kong ¡Los minis marchan de nuevo!, Birds Mania 3D, Fun! Fun! Minigolf touch!,  Colors 3D, Kid icarus (GC) Super Mario land 2:6 golden coins(GB), Calculadora Mario, Pyoro, Inchworm Animation y Photo dojo.

Consolas pirateadas: WII, DS.

Consolas en espera para piratearlas: 3DS.

Imagen de Draco el dragon

Cada uno es libre de usar las

Cada uno es libre de usar las herramientas que quiera, pero paint de MS... Por lo menos usa algun programa que permita editar imagenes por capa, sino te vas a tirar años para hacer algo que puedes tardar cinco minutos... Tienes paint.net, GIMP...

Cito: Para convertir las imagenes a CMAPS debemos de copiar la imagen a la carpeta bmp del GRIT y luego ejecutar el archivo Convert_CMAPS.bat.

Imagen de _-jose-_

Era un ejemplo :P

Pero entonces, que pongo los dos archivos? es decir, el nivel y lo de los colores?

Imagen de Draco el dragon

Lo unico que tienes que

Lo unico que tienes que convertir como mapa de colisiones es el... mapa de colsiones, el nivel (si con eso te refieres a lo que vendria a ser el bg del nivel, vamos, lo que se muestra en pantalla) lo conviertes como cualquier bg.

Gracias, me sirvio de

Gracias, me sirvio de maravilla el HomeBrewmenu, solo faltaria un 4° dia si no fuera mucho pedir jeje, pero en fin no sabras de foros o paginas sobre NFlib (ademas de la del autor, que no me sirvio de mucho) no importa si esta en ingles (actually I prefer in English its quite simple to understand)

Duda al compilar

Hola, tengo un problema que no he podido solucionar, resulta que al compilar todo me sale bien y puedo ver mi homebrew en el No$GBA (Emulaodor), pero al meterlo al NDS, simplemente se ve la pantalla blanca, esto solo me pasa cuando pongo imagenes, ya que al probar el "hello word" si me funciono, estoy usando una flashcard DSTT con YSMenu (la actualizacion mas nueva).

Imagen de Roboron3042

TU flash card notiene soporte

TU flash card notiene soporte para NitroFS(Suele ser la primera causa),para solucionarlo tendras queusar el hbmenu(buscalo arriba).

Imagen de Velcorp

Era se una vez...

era se una vez un niño que tenia la ilusión de que algun dia haya un cuarto tutorial y una nueva actualización de las librerias.......

Era HACE una vez...

Era HACE una vez...

Abra un 4 dia?

Muchas gracias por los tutos, espero que la cosa no se quede aqui y se hagan mas tutos. Por ejemplo como crear un menu, aunque esto no creo que sea muy dificil, como crear dialogos donde vaya pasando el texto.

 

Que programa puedo utilizar para crear mapas? y para crear mapas de colisiones?

 

Saludos,

Dani.

Imagen de Kr3wflow

gracias lo probare

Risalo probare ahora mismo gracias.

Imagen de Kr3wflow

problema al compilar...

Tristeya lo he hecho todo por pasos ... pero al compilar me pone: ;make; no se reconoce como un comando interno o externo. programa o archivo por lotes ejecutables...                         presione una tecla para continuar.                                Llora


 

 

                                                                            For a different World

Imagen de Roboron3042

Um...

creo que ese problema es de la instalación,prueba a reinstalar el devikpro

De donde saco las fuentes?

¿Donde puedo conseguir fuentes para que me salga el texto? ¿O como las comvierto con el grit? He encontrado una "fuente" en bmp (deberia de ser un archivo en FTT, FON o algo asi, ¿no?) pero cuando la combierto y uso no me salen los caracteres que pongo, sino otros. ¿Como lo arreglo?

Imagen de Draco el dragon

Para hacerlas...

Coge un bmp de una fuente (busca en los ejemplos de nflib), y usa la imagen como guia para hacer otra fuente, ya que el orden de los caracteres y el tamaño de cada letra tiene que ser el mismo para que se vean bien.

Si descargas una version de PAlib (por lo menos las 08 lo tenian), vete a la carpeta tools y busca dsfont. Ese programa sirve para "convertir" las fuentes que tengas en el ordenador a bmp para que se puedan usar en palib (o nflib, etc.), pero recuerda cambiar el tamaño del bmp para que quede como el del ejemplo de nflib, y tambien cambiar el bmp a 256 colores.

Imagen de halcon_bite

dos cosas

1: los CMAPS se pueden crear con el paint  y programas parecidos, ??? (pero luego habria que guardarlos en un formato especial o algo asi, no?

 

2: me he leido los tutoriales de palib, los de nflib, de otras webs.  ( incluso a mi profesora de tecnologia, pero no entiende de programacion para consolas) i sigo sin entender para que sirven las variables

me podriais explicar para que son, que hacen, que diferencia hay de una a otra y todo lo que podais.

os lo agradezco muchoGuiño

Imagen de Anabol

Ayy alma de dioss

- Los CMAPS creo recordar que se guardan en .bmp (mapa de bits) y se convierten con el grit de CMPAS. Este punto es muy adelantado para alguien que no sabe lo que es una variable.

- Las variables son todos aquellos datos que se pueden variar. En un juego están presentes por todos lados, la vida del personaje, las coordenadas, la velocidad de un coche...

Las variables tienen un valor inicial que se lo pones tú cuando la declaras. Ej: int vida=2; ese 2, es el valor inicial y quiere decir que la variable vida tien un valor inicial de 2.

Salu2tS!

Imagen de sergiog12

Muy buen tuto

No podrías poner el ejemplo del mapa de colisiones? es que a mi me vendría muy bien, e imagino que a más gente igual...Espero que puedas ponerlo.

Por lo demás, me parecieron geniales los tres tutos, espero que sigas haciendo más tutos así de buenos.

Salu2


Gracias por la firma The Dark Master Guiño

Imagen de exterminator

Pregunta

Veo que cargas dos veces la fuente de texto en dos slots diferentes, una por pantalla. ¿Realmente es necesario? Quiero decir, usando un slot debería llegar en principio, pues la fuente (archivo) usado es el mismo...

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de Almamu

Si has leido los primeros

Si has leido los primeros tutoriales si cargas una fuente y creas dos capas con la misma al final acaban saliendo textos de la pantalla de arriba abajo y viceversa.


Imagen de Draco el dragon

:O

Mapas de colisiones, eso me vendra genial aprenderlo ^^

Gracias por este tuto y los demas, me quitaste algunas dudas de la mente xD

Imagen de magicblack2009

Muchas gracias por todos estos tutoriales

Muy buenos todos, son fantásticos, increíbles. Espero que sigas haciendo más, ya que nos ayudan a todos los que estamos empezando con las NFlib.

Gracias por hacerlos ;)

Salu2


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS

Imagen de bows

Gracias por estos tutoriales,

 

Gracias por estos tutoriales, me ayudan mucho, espero otro con ganas Guiño

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.