viernes, 7 de marzo de 2008

Cargar fondos

La librería PAlib, nos proporciona unos comandos muy sencillos para realizar una serie de acciones con imágenes. Una de ella es cargar fondos o backgrounds.
Pero antes de escribir más código veamos el que presentamos en el post anterior:

Todo lo que empiece por // es un comentario.

#include <PA9.h> Esto nos permitirá poder usar la librería PAlib.

int main(int argc, char ** argv) { Esta línea define la función main que es la primera función a la que llamará nuestra consola.

PA_Init();
PA_InitVBL(); //Inicializa la librería PAlib.

while (1) {
PA_WaitForVBL();
}

Esto es un bucle. Se ejecutará mientras 1, es decir siempre, por que el 1 es el valor cierto. la sentencia WAIT es la que espera a que se refresque la pantalla y es necesaria para que las aplicaciones no parpadeen.

return 0;
} fin de la aplicación

La imagen que vamos a cargar será esta:
El código necesario para cargar la imágen es este:

PA_EasyBgLoad(0, 3, fondo);

donde 0 es la pantalla de abajo de la DS, 3 es uno de los 4 posibles fondos que puede tener cada pantalla y fondo es el nombre que se da a la imagen desde la aplicación PAGfx.

¿Qué es PAGfx? Es una aplicación que convierte las imágenes de formato gráfico a un formato entendible por PAlib. La aplicación necesita tener .net instalado en tu máquina. PAGfx está en C:\devkitPro\PAlib\Tools\PAGfx.

Yo suelo crear una carpeta denominda gfx dentro de source y copio ahí todos los ficheros de PGAfx (se puede hacer en el template para tenerlo ya preparado). Copiamos la imagen en esa carpeta y ejecutamos el programa PAGC Frontend.exe:


Cargamos la imagen (que guardaremos con el nombre fondo.png) en la pestaña de backgrounds y damos a "Save and Convert".

Incluimos estas dos líneas en nuestro código:

#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"
justo debajo del otro include. El código finalmente quedará así:

// Includes
#include        // Include for PA_Lib

#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"

// Function: main()
int main(int argc, char ** argv) {
    PA_Init();    // Initializes PA_Lib
    PA_InitVBL(); // Initializes a standard VBLPA_InitText(1, 2); //Tell it to use text on screen 1, background number 2 PA_OutputSimpleText(1, 1, 1, "Hello World !");   //Print the text on screen 1, with coordinate 1,1
    PA_EasyBgLoad(0, 3, fondo);

    // Infinite loop to keep the program running
    while (1) {
        PA_WaitForVBL();
    }
    return 0;
} // End of main()
finalmente el programa de HelloWorld quedará así:


En la próxima entrega moveremos la pantalla.

Saludos

3 comentarios:

Anónimo dijo...

Muy bueno todo y muchas gracias por los articulos.

La imagen que se usa de background en este articulo no existe, podrias volver a subirla?

Muchas gracias.

Anónimo dijo...

Cuando intento convertir la imagen con el PAGC Frontend me da un error "El sistema no puede hallar el archivo especificado". ¿Alguna idea de porqué pasa esto?

Francisco Javier López Márquez dijo...

Hola, sólo decir que me da muchos errores del tipo:
error: previous declaration of 'const int fondo_Info [3]' with 'C++' linkage
y del tipo:
error: conflicts with new declaration with 'C' linkage
he probado con varios makefile pero falla con todos, a qué se puede deber?