miércoles, 27 de mayo de 2009

Chapter 2 Compilacion de un hola mundo

Codigo principal del Template
Ahora, deberás abrir template.pnproj, o ir dentro del directorio source/ y abrir main.c. Este es el nombre recomendado, main.c es el archivo principal del programa. De hecho, contiene todos los elementos basicos que serán cargados por defecto cuando la rom se ejecute. El template main.c contiene todo lo necesario para ejecutar PAlib. Si tu compilas y ejecutas las roms en un emulador o en DS, Si compilaras y ejecutaras la rom en un emulador o DS, tal cual esta en el main.c, no pasaría nada, simplemente verías dos pantallas en blanco.... Esto es lo que ves la primera vez que abres main.c:
// Includes
#include // Include for PA_Lib

// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Inicializa PA_Lib
PA_InitVBL(); // Inicializa un VBL standard

// Bucle infinito para mantener el programa funcionando
while (1)
{
PA_WaitForVBL();
}

return 0;
} // End of main()


Decodificando el código !
Si ya tienes conocimientos de programación en C++, probablemente esto te va a resultar muy secillo. Para los que no lo tienen, quizás no lo sea tanto, por eso detallaré cada linea a continuación... // Includes

Simple : // Significa que el texto a continuación es un comentario... Cuando ponemos //, le estamos diciendo al compilador que no compile lo que le sigue a la derecha, porlo que puedes escribir cualquier texto como comentarios! Esta linea esta solamente ahi para decir que puedes poner archivos para incluir aquí (imagenes, etc...) #include

Esto significa: Por favor incluye la librería Palib dentro de mi código, yo lo necesitaré ! Si no pones esto, las funciones de la librería Palib, no serán reconocidas, y obtendras errores. El concepto de usar includes, llegará a ser muy importante despues ya que los includes son usados para añadir archivos con graficos, otro código importante, y más. int main(int argc, char ** argv)
Esto puede verse raro, pero lo tendras en todos los projectos: es el comienzo de tu programa, donde todo comienza. No te preocupes intenando averiguar por que está :) simplemente que sepas que cualquier cosa detras de ‘{’ sera ejecutado ! PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL

Estas 2 lines se usaran en todos los proyecto que usen Palib. La primera es una inicialización general. Esto prepara tu programa para usar sprites, fondos, texto, todo. Sin esto la Palib no empezará a funcionar. La segundo, con el VBL, puede ser modificada por usuarios avanzados. Basicamente, el VBL permite sincronizar el programa con la pantalla, a 60 frames por segundo. Si no inicializas el VBL, cualquier programa funcionara los más rápido posible (como 100000 frames por segundo, lo cual es injugable) o no funcionará del todo (quedándose colgado en el primer frame). Siempre debes dejar estas dos lineas en tu programa. // Infinite loop to keep the program running
while (1){
El comando while, ejecuta el codigo que sigue, en corchetes, mientras el resultado del comando en el (aquí esta a 1), es diferente de 0. Aquí, siempre es 1, asi basicamente este un loop infinito. Para que? Bien, si no tienes ese loop, cada linea del codigo sera ejecutada solamente una vez y el programa saldrá, sin mostrar nada más. Esto permite al programa continuar de manera infinita, o por lo menos hasta que es jugador pulse el boton de apagado. El concepto es que en cada ejecución atraves del loop while, el programa calculará todo lo que necesita para la proxima vez que dibuje la pantalla y despues lo dibujará. PA_WaitForVBL();
Este último comando sincroniza el loop infinito que comentamos antes, con la fracuencia de pantalla (60fps). Si no la pones, el programa funcionará como dije antes, MUCHO mas rapido que la frecuencia de la pantalla }

return 0;
} // End of main()
Todo esto es el final de codigo, siempre ahi, siempre como este, no te preocupes por el, solo dejalo ahi solo :p Ahora sabes todo sobre el template, vamos a ver como mostrar texto !

Hola Mundo
Un simple Hola Mundo, sirve para mostrar que facil puede ser... Con este no entraremos en detalles de programación para la DS, solo es para mostrarte que puede ser facil y para introducirte al dia 2 :p
El sistema de textos utiliza los backgrounds, normalmente un background (tienes cuatro capas para elegir), y tambien puedes elegir que pantalla y que y donde ponerlo.Hay otras funciones como configurar la fuente del texto, o cambiar el color de las letras, pero ya las veremos mas tarde :p
Puedes encontrar una copia (o muy similar) de este código en PAlibExamples/Text/Helloworld
#include //Include PAlib

int main(void)
{
PA_Init(); //Inicia la libreria PA_Lib
PA_InitVBL(); // Inicia el Vertical Blanking

PA_InitText(1,2); //Escribelo para escribir en la pantalla 1, background 2
PA_OutputSimpleText(1,1,1,"Hello World !"); //Escribe el texto en la pantalla 1, con coordenadas 1,1

while(1)
{
//Loop infinito para seguir ejecutando el programa indefinidamente
PA_WaitForVBL();
}

return 0;
}

Como puedes ver, la mayoria del código es muy similar, pero no es exactamente igual, al código basico.
En realidad hemos añadido dos lineas: PA_InitText(1,2); //Escribelo para escribir en la pantalla 1, background 2
PA_OutputSimpleText(1,1,1,"Hello World !"); //Escribe el texto en la pantalla 1, con coordenadas 1,1
Lo primero se usa para iniciar el texto, cargando la fuente del texto en la video ram de la DS. Si no se hiciese esto, el texto pareceria un garabato... deberia ser como escribir, pero cambiando cada letra de forma aleatoria ... no serviria ;) PA_InitText tiene 2 argumentos: la pantalla (0 para la pantalla inferior, 1 para la pantalla superior), y el background a usar (0 para la capa mas superior, 1 para la siguiente, 2, y 3 para la mas inferior...).
PA_OutputSimpleText(1,1,1,”¡Hola Mundo!”), como dijimos, escribe el texto en la pantalla. Si el
background fué iniciado con InitText... (En estos momentos, te habras dado cuenta que las funciones PAlib empiezan por PA_...) La funcion texto tiene 4 argumentos:
Pantalla (0-1)
Horizontal (X) tile desde el que empieza, desde 0 hasta 31. Cada tile es un cuadrado de 8×8 pixeles, asi que el tile 0 esta en la posicion 0, tile 1 en la posicion 8 (en pixeles), etc...
Posición vertical , es lo mismo que el horizontal, pero desde 0 hasta 23...
Texto... este texto empieza y acaba con ‘“‘, para que el compilador C lo reconozca...
Una vez entendido esto, simplemente pulsa F6 para compilar y ejecutarlo en DualiS, o F7 para compilarlo y ejecutarlo en DeSmuME ! Pulsando F5 hace una compilacion normal sin cargar la rom(se puede utilizar para compilarlo y pasarlo a la DS...).

No hay comentarios:

Publicar un comentario