[Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Ver el tema anterior Ver el tema siguiente Ir abajo

[Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por Roberto258 el Sáb 19 Feb 2011 - 2:11

En el siguiente tutorial os enseñaré la carga de gráficos más sencilla, así como a convertir vuestros gráficos y a realizar unos splashes para poder cumplir la licencia correctamente. Empecemos con...

El grit

El grit es una aplicación* que viene con la librería en nflib/tools/grit. Gracias a esta aplicación podremos convertir  nuestros gráficos para luego usarlos en la librería. Pero no sólo gráficos; cmaps (mapas de colisiones), fuentes de texto, etc...
Es bastante fácil de utilizar. Simplemente debemos poner el gráfico a convertir en la carpeta "bmp" que está dentro del grit. Para que todo salga bien se debe guardar en formato bmp (de 256 colores). Después, le damos al archivo.bat con el nombre del gráfico que hay que convertir (si son fondos, convert_Backgrounds, si son sprites, convert_Sprites, etc...).
Una vez que lo hallamos hecho, si es un fondo lo que hemos convertido nos aparecerá en la carpeta backgrounds dos archivos que deberemos copiar a la carpeta del proyecto donde lo necesitemos.

Cargando y mostrando fondos

Los que siguieron el tutorial de textos seguro que les habrá resultado bastante complejo cargarlos y mostrarlos (más todavía si eres un acostumbrado a PAlib) y los fondos es más de lo mismo:

NF_Set2D(pantalla, modo);
//Inicia el sistema 2D en la pantalla indicada y modo (poned 0).

NF_SetRootFolder(sistema de archivos);
//Elige la carpeta principal del proyecto("NITROFS" si elegimos nitrofiles).

NF_InitTiledBgBuffers();
//Inicia los buffers de los fondos tileados (como en los textos).

NF_InitTiledBgSys(pantalla);
//Iniciamos el sistema de los fondos en la pantalla dada

NF_LoadTiledBg(archivo, nombre para identificarlo, ancho, alto);
//Cargamos el archivo (sin extensión), le designamos un nombre y le damos las medidas.

NF_CreateTiledBg(pantalla, capa, nombre designado);
//Crea el fondo en la pantalla y capa dadas y el nombre que le dimos anteriormente

He aquí un ejemplo:

Spoiler:
int main(int argc, char **argv) {

consoleDemoInit(); // Inicializa la consola de texto
consoleClear(); // Borra la pantalla
setBrightness(3, 0); // Restaura el brillo

//Definimos la carpeta principal

NF_SetRootFolder("NITROFS");//Elegimos nitrofiles como carpeta inicial

//Inicio el sistema de 2D

NF_Set2D(0, 0);//superior
NF_Set2D(1, 0);//inferior

//Inicio los bufers de los fondos tileados

NF_InitTiledBgBuffers();

//Inicio el sistema de fondos

NF_InitTiledBgSys(0);//superior
NF_InitTiledBgSys(1);//inferior

//Cargamos los fondos

NF_LoadTiledBg("fondos/Testerds", "fondo1", 256, 256);//Cargamos Terterds como fondo1,ancho,alto.
NF_LoadTiledBg("fondos/Entrada", "fondo2", 256, 256);//Cargamos Entrada como fondo2,ancho,alto.

//Creamos los fondos

NF_CreateTiledBg(0, 3, "fondo1");//Creamos el fondo1 en la pantalla de arriba capa 3
NF_CreateTiledBg(1, 3, "fondo2");//Creamos el fondo2 en la pantalla de abajo capa 3

while(1){// Bucle (repite para siempre)
}

return 0;

}

Resultado final:


Cargando y mostrando sprites

Antes de empezar debéis saber que los sprites deben tener un tamaño en concreto (en píxeles):



¿Os ha quedado bien claro? Que no me entere yo que hacéis sprites con medidas diferentes ¬¬.

Vamos con la carga:

NF_Set2D(pantalla, modo);
//Inicia el sistema 2D en la pantalla indicada y modo (poned 0).

NF_SetRootFolder(sistema de archivos);
//Elige la carpeta principal del proyecto("NITROFS" si elegimos nitrofiles).

NF_InitSpriteBuffers();
//Inicia los buffers de los sprites

NF_InitSpriteSys(pantalla);
//Inicia el sistema de sprites en la pantalla dada

NF_LoadSpriteGfx(archivo, id, ancho, alto);
//Carga el sprite en RAM,asignándole un id (0-255) y el ancho y alto.

NF_LoadSpritePal(archivo, id);
//Lo mismo pero con la paleta. Este id irá de 0 a 65.

NF_VramSpriteGfx(pantalla, id_ram, id_vram, false);
//Cargamos el sprite en la VRAM de la pantalla indicada,con el id que se le dió para la RAM y un nuevo id para la VRAM (0-127).

NF_VramSpritePal(pantalla, id_ram, id_vram);
//Lo mismo pero con la paleta. El id de la VRAM irá de 0 a 15.

NF_CreateSprite(pantalla, id_pantalla, id_sprite, id_paleta, posición_x, posición_y);
//Crea el sprite en pantalla

Actualizaciones:[/u]

NF_SpriteOamSet(pantalla);//Debéis indicar la pantalla a actualizar
swiWaitForVBlank();
oamUpdate(&oamMain);
oamUpdate(&oamSub);

Todas estas actualizaciones son necesarias para que el sprite se muestre correctamente en pantalla.

Ejemplo:

Spoiler:
int main(int argc, char **argv) {

consoleDemoInit(); // Inicializa la consola de texto
consoleClear(); // Borra la pantalla
setBrightness(3, 0); // Restaura el brillo

//Definimos la carpeta principal

NF_SetRootFolder("NITROFS");//Elegimos nitrofiles como carpeta inicial

//Inicio el sistema de 2D

NF_Set2D(0, 0);//superior
NF_Set2D(1, 0);//inferior

//Iniciamos los buffers de los sprites

NF_InitSpriteBuffers();

//Inicia el sistema de sprites

NF_InitSpriteSys(0);//superior
NF_InitSpriteSys(1);//inferior

//Cargamos los sprites y sus paletas a la RAM

NF_LoadSpriteGfx("sprites/Ball", 0, 32, 32);
NF_LoadSpritePal("sprites/Ball", 0);

//Cargamos los sprites y sus paletas a la VRAM

NF_VramSpriteGfx(0, 0, 0, true);
NF_VramSpritePal(0, 0, 0);

//Creamos el sprite en pantalla

NF_CreateSprite(0, 0, 0, 0, 0, 0);//pantalla superior

while(1) {// Bucle (repite para siempre)


NF_SpriteOamSet(0); // Actualiza el Array del OAM
oamUpdate(&oamMain); // Actualiza a VRAM el OAM Secundario
oamUpdate(&oamSub);
swiWaitForVBlank(); // Espera al sincronismo vertical


}

return 0;

}

Resultado final:


Desechos

Si os habéis estado moviendo por el mundo de la scene de la nds, os habréis dado cuenta de que la ds no tiene un buen potencial. Es por eso por lo que si eres un buen aficionado querrás controlar el uso de la RAM y la VRAM para lograr un mayor resultado:

NF_ResetTiledBgBuffers();
//Resetea todos los fondos (borra RAM).

NF_UnloadTiledBg(nombre);
//Quitamos de la RAM el fondo dicho.

NF_DeleteTiledBg(pantalla, capa);
//Borra de la pantalla (y de la VRAM) el fondo que se encuentra en la pantalla y capa indicadas.

NF_ResetSpriteBuffers
//Resetea los sprites (borra RAM).

NF_UnloadSpriteGfx(id);
//Quita el sprite con el id indicado de la RAM

NF_UnloadSpritePal(id);
//Lo mismo con la paleta.

NF_FreeSpriteGfx(pantalla, id_vram);
//Borra el sprite de la VRAM de la pantalla indicada.

NF_DeleteSprite(pantalla, id);
//Elimina de la pantalla indicada el sprite indicado.

Splashes

Los splashes de NFlib y devkitpro los encontraréis en nflib/tools/splash screens. Los debemos convertir con el método dicho al principio y crear una carpeta en la carpeta "nitrofiles" llamada splashes.
Luego poned este ejemplo en el main:

Spoiler:
//Declarando variables

s8 c , b = -16; //Para controlar la luminosidad de las pantallas
s32 time = 60*5; //Para controlar el tiempo de los splashes

//Inicializa el sistema 2D

NF_Set2D(1,0);//En la pantalla de abajo
NF_Set2D(0,0);//En la pantalla de arriba

//Inicio los bufers de los fondos tileados

NF_InitTiledBgBuffers();

//Inicio del sistema de fondos

NF_InitTiledBgSys(1);//Inicio el sistema de fondos inferior
NF_InitTiledBgSys(0);//Inicio el sistema de fondos superior

//Define nitrofiles como carpeta principal

NF_SetRootFolder("NITROFS");

//Carga los fondos a la RAM

NF_LoadTiledBg("splashes/nfl","nfl", 256, 256); // Carga el fondo llamado nfl,que está en la carpeta splashes y le damos el nombre de nfl
NF_LoadTiledBg("splashes/devkitpro","dev", 256, 256); // Carga el fondo llamado devkitpro,que está en la carpeta splashes y le damos el nombre de dev

//Carga los fondos a la VRAM

NF_CreateTiledBg(0, 3, "nfl");//Carga el fondo en la pantalla de arriba capa 3
NF_CreateTiledBg(1, 3, "dev");//Carga el fondo en la pantalla de abajo capa 3

//Empezamos con los splashes

while(!(b==0)){//Mientras que b no sea 0...

c++;//Sumamos 1 a c

if(c == 5){//Si c es igual a 5...

c= 0;//C valdrá 0
b++;//Se le suma 1 a b
}
setBrightness(3, b);//Restaura el brillo con el valor de la variable b
swiWaitForVBlank();//Espera sincronismo vertical
}

scanKeys();//Escanea las teclas

while(time && !(keysHeld() & KEY_A)){//Mientras no se pulse a...

swiWaitForVBlank();//Espera sincronismo vertical
time--;//Restamos uno al tiempo
scanKeys();//Escanea las teclas
}

c = 0, b = 0;//Asignamos el valor 0 a las variables del brillo

while(!(b == -16)){ //Mientras que b no sea igual a -16...

c++;//Se le suma 1 a c

if(c == 5){//si c es igual a 5

c = 0;//c es iagual a 0
b--;//Se le resta 1 a b
}
setBrightness(3, b);//Cambia la luminosidad a b
swiWaitForVBlank();//Espera el sincronismo vertical
}

setBrightness(3, 0);// Restaura el brillo

//Desechos

NF_UnloadTiledBg("nfl");//Borramos el fondo nfl de la RAM
NF_UnloadTiledBg("dev");//Borramos el fondo dev de la RAM
NF_DeleteTiledBg(0,3);//Borra el fondo de la pantalla de arriba, capa 3
NF_DeleteTiledBg(1,3);//Borra el fondo de la pantalla de abajo, capa 3

Creo que viene todo tan explicado que me sobran comentarios...¡Hasta el próximo tutorial!
__________________________________________________________________________

Otros tutoriales nflib

1- Conceptos previos e instalación.
2- Textos;usarlos y mostrarlos.
4- Teclas,música & cmaps.
4.1- Maxmod, las librerías de audio de la NDS


Última edición por Roberto258 el Jue 1 Ago 2013 - 3:53, editado 6 veces
avatar
Roberto258
NDS-Extrero

Masculino
Cantidad de envíos : 1145
Localización : P'allá, p'allá, y luego to p'alante
Empleo/Ocio : Llevar el juego del asesino :P
Humor : Quarcástico
Opinión sobre NDS-Extra : Me Encanta
Inscripción : 28/08/2010
Reputación : 110
Puntos : 1416

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por pepenillo el Sáb 19 Feb 2011 - 12:58

Viene bien explicado, luego lo pruebo y te digo si hay algun problema.

Enhorabuena por otro gran tuto.

pepenillo
NDS-Extrero

Masculino
Cantidad de envíos : 1765
Opinión sobre NDS-Extra : Ninguna
Inscripción : 12/08/2010
Reputación : 179
Puntos : 2532

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por rph el Dom 27 Feb 2011 - 22:30

Gracias aunque no tengo ni idea de programar Wink

rph
Recién llegado

Masculino
Cantidad de envíos : 18
Opinión sobre NDS-Extra : Es la Mejor de NDS
Inscripción : 27/02/2011
Reputación : -1
Puntos : 23

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por Roberto258 el Sáb 5 Mar 2011 - 1:59

rph escribió:Gracias aunque no tengo ni idea de programar Wink

Bueno,para seguir estos tutos no necesitarás saber mucho de programación,cuando la necesites será cuando te decidas a hacer tu propio videojuego,ve aprendiendo poco a poco.

P.D.:En marcha el tutorial sobre botones y audio.


Última edición por Roberto258 el Dom 29 Mayo 2011 - 23:01, editado 1 vez
avatar
Roberto258
NDS-Extrero

Masculino
Cantidad de envíos : 1145
Localización : P'allá, p'allá, y luego to p'alante
Empleo/Ocio : Llevar el juego del asesino :P
Humor : Quarcástico
Opinión sobre NDS-Extra : Me Encanta
Inscripción : 28/08/2010
Reputación : 110
Puntos : 1416

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por pepenillo el Sáb 5 Mar 2011 - 13:42

Bravo, otro tutorial.

pepenillo
NDS-Extrero

Masculino
Cantidad de envíos : 1765
Opinión sobre NDS-Extra : Ninguna
Inscripción : 12/08/2010
Reputación : 179
Puntos : 2532

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por Roberto258 el Jue 1 Ago 2013 - 3:51

Post revisado. Corregidos los spoilers, errores gramaticales, resubidas las imágenes y creada una tabla para que se vea más claro el tamaño obligatorio de los sprites.

Creo que va siendo hora de adentrarnos un poco más en el tema de los gráficos, así que anuncio desde ya que el próximo tutorial estará dedicado a gráficos un poco más avanzados.
avatar
Roberto258
NDS-Extrero

Masculino
Cantidad de envíos : 1145
Localización : P'allá, p'allá, y luego to p'alante
Empleo/Ocio : Llevar el juego del asesino :P
Humor : Quarcástico
Opinión sobre NDS-Extra : Me Encanta
Inscripción : 28/08/2010
Reputación : 110
Puntos : 1416

Volver arriba Ir abajo

Re: [Tutorial] NFlib, gráficos simples: fondos & sprites. Utilizar los splashes.

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.