RICO
ricosh@hotmail.com |
>0- Introduction |
>I- Qu'est-ce qu'un sprite |
>II- Les différentes techniques de sprites |
>1- la plus évidente : |
void croix( int x , int y ) /* Ceci est une fonction */ { line( x+2 , y , x+2 , y+4 , 5); /* dessine la ligne verticale */ line( x , y+2 , x+4 , y+2 , 6); /* dessine la ligne horizontale */ /* si line est defini : void line( int x1,y1, x2,y2, unsigned char col ); */ } void main() /* Pour ceux qui ne connaissent pas le C ceci est le programme Principal */ { initvga(); /* Initialisation du mode graphique */ croix( 50 , 50 ); /* On dessine la croix en (50,50) */ getch(); /* On attend l'appui sur une touche */ modetexte(); /* On retourne au mode texte */ } | l |
>2- La technique des vrais |
char croix[5][5]= {{ 0 , 0 , 6 , 0 , 0 }, { 0 , 0 , 7 , 0 , 0 }, { 1 , 2 , 3 , 4 , 5 }, { 0 , 0 , 7 , 0 , 0 }, { 0 , 0 , 6 , 0 , 0 }, }; | l |
declaration : croix : tableau 5 lignes,5 colonnes contenant des entiers de 8 bits , initialisation ... fin de declaration. | l |
void des_spr( int x , int y , char spr[5][5] ) { int i,j; for( i= 0 ; i<5 ; i++ ) for( j= 0 ; j<5 ; j++ ) putpixel( x+j , y+i , spr[j][i] ); /* Affichage d'un pixel de couleur spr[j][i] en position x+j, y+i */ } | l |
>IV- Amélioration (Je vous ai menti) |
void des_spr( int x , int y , char spr[5][5] ) { int i,j; for( i= 0 ; i<5 ; i++ ) for( j= 0 ; j<5 ; j++ ) if( spr[j][i] != 0 ) /* si la couleur est differente de zero */ putpixel( x+j , y+i , spr[j][i] ); } | l |
l |
On remarque que la place memoire occupée par les sprites peut être importante avec cette methode, mais il en va souvent comme ça : La rapidité est souvent au
détriment de l'espace occupé.. Pour les mauvais programmeurs! Car en fait les techniques de compression de sprites existent, et elles sont souvent plus rapides à
dessiner (un comble). On peut utiliser par exemple une technique s'inspirant du RLE8 (Run Lenght Encoding 8-bits) utilisé par window : on code (en hex) : 03 4F
une succession de 3 pixels de couleur 4Fh. Elle est plus rapide car souvent les 'trous' dans le sprite sont nombreux et se suivent, le code : 0A 00, evite de tester les
dix pixels pour savoir si ils sont transparents, on se contente de les sauter. Pour ceux que ça interesse (le gain peut etre important) on peut utiliser les codes :
|
l | ce n'est pas la spécification exacte du RLE8 : c'est ce que j'utilise personnellement, je n'ai pas trouvé la spécification correcte! |
>III- Ca se complique... Ou la première animation |
>La technique du buffer |