Après avoir vu les graphismes, nous allons voir comment obtenir un mouvement grâce aux fonctions graphiques du SDK.
I - Introduction
Le mouvement d'une image est très simple, c'est juste la variation des coordonnées de cet image. Contrairement aux images fixes, nous utiliserons donc des variables pour les coordonnées. Les valeurs de ces variables seront modifiées par différentes opérations(automatiques ou déclenchées par l'utilisateur).
II - Rappel Code:
Bdisp_PutDisp_DD(); // trace le contenu de la VRAM sur l'écran
Bdisp_AllClr_DD(); // efface l'écran
Bdisp_AllClr_VRAM(); // efface la VRAM
Bdisp_AllClr_DDVRAM(); // efface le contenu de la VRAM et l'écran
Pour pour plus d'informations consultez la Leçon n°7. méthode que nous utiliserons pour dessiner et éviter le scintillement:
Code:
// calcul des coordonnées
// dessiner dans la VRAM
// effacer juste l’écran ( Bdisp_AllClr_DD() )
// tracer avec le contenu de la VRAM sur l'écran ( Bdisp_PutDisp_DD() )
// effacer la VRAM ( Bdisp_AllClr_VRAM() )
Ces opérations seront repérées dans la boucle principale. Plus d'informations consultez L'astuce complémentaire de Pylaterreur.
II - Exemple de Code
a_Mouvement automatique d'une image simple
Code:
for(i=1 ; i<20 ; i++) //début boucle principale {
// calcul des coordonnées x = 2*i; y = i;
// dessiner dans la VRAM Bdisp_DrawLineVRAM(x,y,x+10,y+15);
// effacer juste l’écran Bdisp_AllClr_DD();
// tracer avec le contenu de la VRAM sur l'écran Bdisp_PutDisp_DD();
// effacer la VRAM Bdisp_AllClr_VRAM(); }
//fin boucle principale
b_Mouvement d'une image compliquée effectué par l'utilisateur
Voici le code minimale mais compilable
Code:
#include "fxlib.h"
// fonction contenant l'image à tracer
void TraceImg(int x, int y) {
Bdisp_DrawLineVRAM(0+x,55+y,2+x,55+y);
Bdisp_DrawLineVRAM(6+x,55+y,8+x,55+y);
Bdisp_DrawLineVRAM(0+x,56+y,2+x,56+y);
Bdisp_DrawLineVRAM(6+x,56+y,8+x,56+y);
Bdisp_DrawLineVRAM(0+x,57+y,2+x,57+y);
Bdisp_DrawLineVRAM(6+x,57+y,8+x,57+y);
Bdisp_DrawLineVRAM(3+x,58+y,5+x,58+y);
Bdisp_DrawLineVRAM(3+x,59+y,5+x,59+y);
Bdisp_DrawLineVRAM(3+x,60+y,5+x,60+y);
Bdisp_DrawLineVRAM(0+x,61+y,2+x,61+y);
Bdisp_DrawLineVRAM(6+x,61+y,8+x,61+y);
Bdisp_DrawLineVRAM(0+x,62+y,2+x,62+y);
Bdisp_DrawLineVRAM(6+x,62+y,8+x,62+y);
Bdisp_DrawLineVRAM(0+x,63+y,2+x,63+y);
Bdisp_DrawLineVRAM(6+x,63+y,8+x,63+y);
}
// fonction principale
int AddIn_main(int isAppli, unsigned short OptionNum) {
int x, y; // declaration
// initialisation des variables
x=10;
y=10;
while( !IsKeyDown(KEY_CTRL_EXIT) ) //debut boucle principale {
// calcul des coordonnées en fonction de la touche pressée
if( IsKeyDown(KEY_CTRL_RIGHT) ) x++;
if( IsKeyDown(KEY_CTRL_LEFT) ) x--;
if( IsKeyDown(KEY_CTRL_UP) ) y--;
if( IsKeyDown(KEY_CTRL_DOWN) ) y++;
// dessiner dans la VRAM TraceImg(x,y);
// effacer juste l’écran Bdisp_AllClr_DD();
// tracer avec le contenu de la VRAM sur l'écran Bdisp_PutDisp_DD();
// effacer la VRAM Bdisp_AllClr_VRAM();
} //fin boucle principale
return 1;
}
#pragma section _BR_Size unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); }
#pragma section
L'image se déplace en fonctions des touches sur lesquelles vous appuyez( pour réviser les touches consultez la Leçon 6 ). Ce programme effacera l'image et la redessinera même si elle n'a pas bougée, c'est la solution la plus simple. Vous pouvez utiliser une boucle qui permettra d'attendre qu'une touche soit pressée ou d'autres astuces.
IV - Note
PICT 9860 de Nicocreation permet la gestion du mouvement, ce logiciel génère directement une fonction contenant une image avec les coordonnées en paramètres.
L'utilisation des fonctions du SDK n'est pas toujours appropriée pour le mouvement et assez lent. Il est conseillé d'utiliser des sprits grâce à une librairie appropriée (SpritLib de PierrotLL ou FX-Revolution de Kucalc).