[Tutoriales Palib] 2. Nuestros primeros pasos con palib

<p>2. Nuestros primeros pasos con Palib

Aquí vamos con la siguiente parte

En este tutorial vamos a aprender los códigos de palib mas básicos. Y vamos ha hacer nuestro primer homebrew

2.1 Lección muy breve de C

Como ya sabéis palib usa el C como lenguaje de programación

EL C es un lenguaje de programación. Se escribe un código en el editor para que luego ocurra un suceso determinado.

Un ejemplo (ejemplo sacado del palib):

PA_OutputSimpleText(1,5,5,"Hola mundo");

Eso quiere quiere decir, que en la pantalla superior de la ds.

Aparecerá un texto que pondrá "hola mundo" justo en la coordenada 5-5 de la pantalla

(parece complicado, pero luego no lo es)

Para pasar esto a programa (en este caso nds) tenemos que usar un compilador, que traduce o compila el código que hemos puesto al lenguaje del ordenador/nds (código binario). Cuando abrimos el nds saldrá justo lo que hayamos puesto en el código

2.2 Estructura básica de un programa con palib


Vamos a comenzar ya, nos metemos en la carpeta del devkitpro y en palib. Nos metemos ahora en tools y en vham. Este es nuestro editor de código que vamos a usar aunque se puede usar el bloc de notas también

Abrimos el vham y le damos a nuevo proyecto, ponemos el nombre que queramos y seleccionamos donde estará nuestro proyecto (la carpeta no puede tener ningún espacio)

Una vez terminado, nos saldrá en la pantalla un código. Este es el código básico que toda aplicación con palib debe tener para funcionar:
#include <PA9.h>

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();

while (1)
{

PA_WaitForVBL();
}

return 0;
}


Si compiláramos este código, y abriéramos el nds. No nos saldría nada. Nada mas que una pantalla en negro

Sin embargo este código es muy importante, ya que permite ejecutar el homebrew y mantenerlo en funcionamiento

Ahora vamos a ir definiendo cada una de las partes:

#include <PA9.h>
El #include es para incluir instrucciones, herramientas, recursos... al compilador

Lo que esta incluyendo ahí. Son las propias palib al compilador.

int main(int argc, char ** argv)
{
Esto quiere decir el comienzo del código del main

PA_Init(); Esto es para que se inicien las palib con todas sus funcione

PA_InitVBL(); Inicia las rutinas necesarias para que la DS realice ciertas tareas con regularidad. Como obtener la posicion del stylus

while (1) Mientras que el valor de una variable sea 1 se ejecuta este código. Por ahora vamos a decir que se ejecuta continuamente y nunca termina

PA_WaitForVBL(); Sirve para sincronizar el juego con la velocidad de dibujar la pantalla, con esto esperamos a que acabe de dibujar la pantalla. Sucede cada 16,5 milisegundos.

return 0; Sale de la función, en este caso main(). Nunca se debe de llegar a este punto en la función main() ya que nos saldríamos del programa.</p>

La } del final significa el final del código

Y por ultimo, queda por mencionar el //

Sirve para hacer anotaciones en el programa. No se tiene en cuenta para compilar, solo sirve de guía para ti u o otra persona que vea el código. En el vham te aparecerán unos cuantos,

Los códigos que pondré haré anotaciones de este mismo estilo para guiaros

2.3 Nuestro primer homebrew: Un hola mundo

Haremos un sencillo homebrew. Lo único que hará es mostrar un determinado texto que nosotros pondremos

Estos son los códigos para crear textos sencillos:

PA_InitText(1,//Se refiere a la pantalla superior, la táctil seria la 0
3//se trata de la capa 3, existen 4 capas: 0,1,2,3. Las explicaremos mas adelante
);

PA_OutputSimpleText(1,// la pantalla superior como nosotros sabemos
10,//Coordenada x de la pantalla para situar el texto
10,//Coordenada y de la pantalla para situar el texto
"Hola Mundo"//aqui esta el texto. Siempre tiene que ir entre comillas
);
He puesto comentarios en el codigo para que sea autoexplicativo,
pero lo explicare de todas formas otra vez

Primero se escribe el PA_InitText para preparar la ds para poner texto en una determinada pantalla y capa. Seria como coger el papel para escribir.

Luego va el PA_OutputSimpleText para escribir el texto en dicha pantalla (hay que decirlo otra vez) y en una determinadas coordenadas de la pantalla

Os pongo aquí lo que seria el código entero

#include <PA9.h>

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1,3);
PA_OutputSimpleText(1,10,10,"Hola Mundo");

while (1)
{

PA_WaitForVBL();
}

return 0;
}


Nos vamos a project, a target y a build. Si tenemos el código bien escrito, nos creara un nds y un nds.gba. Pos ya esta XD

Tarea:

Os voy a poner una tarea para que hagáis hasta el siguiente tutorial. Tenéis que escribir un texto en la esquina superior
izquierda de la pantalla superior. Luego en la esquina derecha inferior de la pantalla tactil, y por ultimo un texto en el centro de cualquier pantalla
Para hacerlo tendréis que usar los PA_InitText y el PA_OutSimpleText que hemos aprendido en el tutorial. Esta tarea
sirve como refuerzo y ademas para que aprendais a dominar las coordenadas, y así aprendáis a situar mejor el próximo tuto tratar sobre los fondos

Un saludo
muy buen tuto, un voto positivo

FELICIDADES XD
amchacon escribió:PA_InitVBL(); Esto es difícil de explicar. Lo que hace es iniciar y preparar un bucle continuo. Vital para mantener el programa funcionando en la ds

PA_WaitForVBL(); Prepara la consola para iniciar el bucle nombrado anteriormente

return 0; Empieza el bucle, se vuelve al principio del código para ejecutar el programa una y otra vez. Y así mantenerlo funcionando continuamente hasta que se apague la ds

Emmm... Mejor así:
amchacon escribió:PA_InitVBL(); Inicia las rutinas necesarias para que la DS realice ciertas tareas con regularidad, como obtener las coordenadas del stylus o animar los sprites.

PA_WaitForVBL(); Sirve para sincronizar el juego con la velocidad de dibujar la pantalla, con esto esperamos a que acabe de dibujar la pantalla. Sucede 59.8 [+risas] veces por segundo.

return 0; Sale de la función, en este caso main(). Nunca se debe de llegar a este punto en la función main() ya que nos saldríamos del programa.

Me da que tu estás empezando, ¿eh? [sonrisa] Lo de PA_InitVBL no es exactamente correcto, pero no hace falta saber más a este nivel...
ANTONIOND escribió:
amchacon escribió:PA_InitVBL(); Esto es difícil de explicar. Lo que hace es iniciar y preparar un bucle continuo. Vital para mantener el programa funcionando en la ds

PA_WaitForVBL(); Prepara la consola para iniciar el bucle nombrado anteriormente

return 0; Empieza el bucle, se vuelve al principio del código para ejecutar el programa una y otra vez. Y así mantenerlo funcionando continuamente hasta que se apague la ds

Emmm... Mejor así:
amchacon escribió:PA_InitVBL(); Inicia las rutinas necesarias para que la DS realice ciertas tareas con regularidad, como obtener las coordenadas del stylus o animar los sprites.

PA_WaitForVBL(); Sirve para sincronizar el juego con la velocidad de dibujar la pantalla, con esto esperamos a que acabe de dibujar la pantalla. Sucede 59.8 [+risas] veces por segundo.

return 0; Sale de la función, en este caso main(). Nunca se debe de llegar a este punto en la función main() ya que nos saldríamos del programa.

Me da que tu estás empezando, ¿eh? [sonrisa] Lo de PA_InitVBL no es exactamente correcto, pero no hace falta saber más a este nivel...

La verdad esque este tutorial lo hice hace 2 meses para espalnds y llevo ya 3 meses con las palib... Algunos errores tuve en el tutorial (lo de decir que return 0 era para volver al principio del codigo... Es para pegarme un tiro,  que chorrada XD)

Las otras dos cosas... Segun los tutoriales que lei, esas funciones servian para eso. Pero vamos me fio mejor de ti, que segun he oido eres el mas maquina por aqui [ginyo]

Saludos
amchacon escribió:Las otras dos cosas... Segun los tutoriales que lei, esas funciones servian para eso. Pero vamos me fio mejor de ti, que segun he oido eres el mas maquina por aqui [ginyo]

Saludos

En realidad, lo que hacen esas funciones es más de lo que he dicho... PA_InitVBL activa la IRQ (Interruption ReQuest) de VBLANK y le asigna una función donde actualiza muchas cosas (sprites, stylus, gh pad si está insertado...). Esta interrupción ocurre cada vez que la pantalla se termina de dibujar, es decir, 59.8 veces por segundo. PA_WaitForVBL aprobecha esta IRQ y espera a que ocurra para continuar con el programa. Si no esperásemos, el código se ejecutaría a toda la velocidad posible y sería imposible de controlar. Por otra parte, si el código tarda mucho en ejecutarse, te la saltas y el juego iria a menos FPS... PA_Init() inicia el sistema de video, resetea los sistemas de sprites y tal... Son cosas que no es imprescindible saber, pero no hacen daño. XD Una vez que se avanza, con las IRQ se pueden conseguir cosas bastante chulas, como efectos de pantalla o multithreading, pero esto solo sirve cuando ya se tiene cierto nivel, jeje. Lo que pasa es que no es plan liar a alguien que empieza y por eso te he corregido esas cosas. [+risas]
por un tutorial parecido empecé yo muy buen aporte [risita]
Hombre jugarse que un return sirve para volver al inicio del bucle... XD
Una cosa me ha estado saliendo errores en el homebrew de Hola Mundo y asido por que en tu tutorial tienes puesto PA_OutPutSimpleText en vez de esto PA_OutputSimpleText. Cambialo en el tutorial porque yo me he equivocado en lo de la mayuscula. Esta muy bien el tuto XD
7 respuestas