On va y aller doucement pour les textes, sinon, on va vite se mélanger les pinceaux

.
L'initialisation du texte
Il faut initialiser le texte avec la fonction PA_LoadDefaultText.
Code : C | void PA_LoadDefaultText ( u8 ecran, u8 background ) ;
|
Voici ce qu'il faut donner comme arguments à cette fonction :
- ecran : c'est l'écran où vous voulez afficher du texte (généralement, on initialise les deux pour être tranquille) ;
- 0 : écran tactile
- 1 : écran du haut
- background : C'est la surface sur laquelle vous voulez écrire votre texte (il y en a 4).
- 0 : haute couche
- 1 : la suivante (plus on descend, moins on est prioritaire et plus on on a de risques d'être recouvert
)
- 2 : la suivante
- 3 : la dernière couche (celle qui a le plus de chance d'être recouverte)
Pour le background, cela marche de la même façon que les calques sous Photoshop.
Le texte !
Il existe la fonction
u16 PA_OutputSimpleText(u8 ecran, u16 colonne, u16 ligne, const char *texte)
mais elle n'est pas comparable à
printf. En effet, cette fonction sert à créer un texte statique. Autrement dit, on ne peut pas afficher de variables (
"%d",
"%f",
"%c",
"%s", etc...). C'est pour cette raison que nous la laissons tomber pour privilégier la fonction :
Code : C | void PA_OutputText(u8 ecran, u16 x, u16 y, const char *texte, ...) ;
|
Cette fonction présente deux avantages : elle permet de créer un texte dynamique (grâce à l'affichage de variables modélisées par l'argument
...), et elle nous fait de la place sur le disque dur comparée à sa frangine

.
Attention les formateurs de sortie %ld (pour les
long
) et %c (pour les caractères) ne sont pas supportés ! Je suppose que beaucoup d'autres ne doivent pas l'être, mais pas de panique les principaux sont au rendez-vous.

. Néanmoins, si cela vous perturbe, vous pouvez créer une chaîne de caractères, et via un
sprintf écrire tout le texte que vous voulez, puis l'utiliser dans
PA_OutputText.
Alors, analysons cette fonction :
- u8 ecran : on choisit l'écran sur lequel écrire
- 0 : écran tactile
- 1 : écran du haut
- u16 x :
Pour le texte, on n'utilise pas les pixels, mais ce que l'on appelle des tiles ("tuiles" en français). Un tile correspond à un carré de 8*8 pixels. Et un écran NDS contient 24 lignes de 8 pixels et 32 colonnes de 8 pixels (256*192 pixels). A vous de trouver le meilleur endroit pour le rendu de votre texte.
- valeur comprise entre 0 et 31 (puisque 256 / 8 = 32, n'oubliez pas de réfléchir en tiles !).
Note : 31 n'est pas trop recommandé puisque votre texte est censé faire plus d'un caractère.. Et si vous dépassez, le texte sera remis à la ligne.
- u16 y :
- valeur comprise entre 0 et 23 (192 / 8 = 24)
Ici si vous dépassez, votre texte ne sera pas affiché...
- char *text : votre chaîne.
- ... : toutes vos variables.
Ce qui donnerait :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #include <PA9.h>
int main(int argc, char **argv)
{
const char *pseudo="PODS";
PA_Init();
PA_LoadDefaultText(1,0);//on initialise l'écran du haut à la première couche
PA_LoadDefaultText(0,3);//on initialise l'écran tactile à une couche peu profonde (on peut se le permettre ici, on n'affichera qu'un texte)
//Le texte ne changeant pas, pas besoin de le mettre dans la boucle
PA_OutputText(1, 2, 2, "Hello World !");
PA_OutputText(0,5,5,"Mon pseudo est %s.",pseudo);
while(1)
{
PA_WaitForVBL();
//Boucle infinie (inutile de l'utiliser puisqu'il n'y aura pas de changement)
}
return 0;
}
|
Avec No$GBA :
Si vous avez tout le texte d'un écran à mettre à jour, il existe cette fonction : void PA_ClearTextBg(ecran) :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #include <PA9.h>
int main(int argc, char **argv)
{
int compteur=0;
PA_Init();
PA_LoadDefaultText(0,0);
for(compteur = 0; compteur < 2147483647; compteur++)//On limite à la taille d'un int, c'est suicidaire mais en même temps ce n'est qu'un exemple
{
PA_OutputText(0,0,0,"%d",compteur);
PA_WaitForVBL();
PA_ClearTextBg(0);
/* Il faudrait attendre plus longtemps pour éviter que le texte ne clignote, mais comme je l'ai dit ce n'est qu'un exemple ;) */
}
return 0;
}
|
Tadaaaa, nous y sommes arrivés

!