Développer en Amateur sur Nintendo DS
Mathématiques
Les nombres décimaux
Le processeur principal de la Nintendo DS n'est pas très performant sur les calculs utilisant des nombres décimaux. Les utiliser peut donc ralentir concidérablement une application. Heureusement, il existe un moyen pour contourner ce problème : utiliser des nombres décimaux à virgule fixe ("fixed point").
Le principe est simple, on partage les 32 bits d'un entier en 2 parties : la partie entière (sur 24 bits) et la partie décimale (sur 8 bits). Cela se traduit par l'idée suivante : on représente tous les nombres comme étant des fractions de 256. C'est à dire que pour représenter la valeur 1, on utilise la valeur 256 (car 256/256 = 1), pour représenter 0.5, on utilise 128 (car 128/256 = 0.5) et ainsi de suite.
Dans la pratique, calculer en fixed point revient à faire des opérations de décalage de bits. Multiplier par 256 est un décalage de 8 bits vers la gauche et diviser par 256 est un décalage de 8 bits vers la droite.
Un exemple, nous allons déplacer 3 lettres à des vitesses différentes.
- La lettre F (pour "fast") se déplacera de 1 case par frame.
- La lettre A (pour "average") se déplacera de 0.5 case par frame.
- La lettre S (pour "slow") se déplacera de 0.25 case par frame.
int main(int argc, char ** argv) {
s32 fast_speed = 256; // 1 step per frame
s32 avrg_speed = 128; // 0.5 step per frame
s32 slow_speed = 64; // 0.25 step per frame
// Initials positions
s32 fast_x = 0;
s32 avrg_x = 0;
s32 slow_x = 0;
// System initialization
PA_Init();
PA_InitVBL();
PA_InitText(0, 0);
while(1) {
PA_OutputSimpleText(0, fast_x >> 8, 1, " F");
PA_OutputSimpleText(0, avrg_x >> 8, 3, " A");
PA_OutputSimpleText(0, slow_x >> 8, 5, " S");
// Move the text
fast_x += fast_speed;
avrg_x += avrg_speed;
slow_x += slow_speed;
// If a letter arrive at the end of the screen, make it appear at the other side
if((fast_x >> 8) == 31)
fast_x = 0;
if((avrg_x >> 8) == 31)
avrg_x = 0;
if((slow_x >> 8) == 31)
slow_x = 0;
PA_WaitForVBL();
}
return 0;
}
Les angles
La PALib calcule les angles suivant le schéma suivant :
Comme on peut le voir, les angles varient de 0 à 511, l'angle de 0° pointant vers l'Est.