Home   Archives    Hardware   Programmation   Challenges   Forum   Le Mag    Faq   La Communauté   L'Equipe
 
L'équipe progG de Ti-Fr

Voici les nicks de vos serviteurs ;-)

chickensaver_john
Kevin Kofler
Thibaut
janjan2
TiMad
Iceman89
fréka
Zewoo
Squale92
Verstand
ZdRUbAl
UtOpIaH

et nEUrOne ...

Une idée ?
Une idée pour améliorez cette partie? ou tout simplement vous souhaitez participer à l'élaborations des tutos.
Mailez-nous ici

Les raccourcis
 

Chapitre XV


    Ce chapitre constitue une suite du Chapitre XII concernant les sprites en noir et blanc. Il est donc impératif que vous l'ayez lu, et surtout, compris.
    Il est aussi nécessaire que vous ayez lu et compris le Chapitre XIV concernant les graphismes de base en niveaux de gris.
    En effet, ce chapitre va nous permettre de "mêler" des instructions de ces deux chapitres, afin de créer des sprites en niveaux de gris. (4 pour être plus précis, puisque TIGCC ne nous permet pas d'utiliser la méthode des 7 niveaux de gris, qui ne fonctionne pas de façon correcte sur HW2).
    Si vous souhaitez avoir des précisions concernant la façon dont les niveaux de gris fonctionnent sur nos TIs, je vous conseille de lire cette page, qui est consacrée à ce sujet.

 

I:\ Fonctionnement des Sprites en niveaux de gris :

    Pour afficher des Sprites en niveaux de gris, il faut, tout comme pour les autres types de graphismes en niveaux de gris, utiliser deux plans à tour de rôle...

    Nous allons, pour illustrer ceci, étudier l'exemple d'un sprite, de la même façon que nous l'avons fait au Chapitre XII, dans la partie définition manuelle...

  •     Il faut tout d'abord dessiner, sur une feuille de papier quadrillé, le sprite en niveaux de gris, tel qu'il devra apparaître une fois programmé :

Sprite en niveaux de gris...

  •     Ensuite, il faut parvenir à distinguer ce qui devra être dessiné sur le plan LIGHT_PLANE de ce qui devra l'être sur le plan DARK_PLANE. (En se rappelant que ce qui apparaîtra en noir à l'écran doit être affiché sur les deux plans...). Dans l'exemple que nous venons de prendre, cela nous donne :

   1: LIGHT _PLANE :

Sprite en niveaux de gris... LIGHT_PLANE

    Ensuite, il s'agit de transformer ce dessin en une liste de nombres hexadécimaux. (Je vous invite à lire le Chapitre XII pour plus de détails à ce sujet !).
    On obtiendra ici :
        static unsigned short sprite_light[] = {0xFFFF, 0x8181, 0x8181,0x8181, 0x8181, 0x8181, 0x8181, 0xFE7F, 0xFE7F, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0xFFFF};

 

   2: DARK_PLANE :

Sprite en niveaux de gris... DARK_PLANE

    Ensuite, il s'agit de transformer ce dessin en une liste de nombres hexadécimaux. (Je vous invite à lire le Chapitre XII pour plus de détails à ce sujet !).
    On obtiendra ici :
        static unsigned short sprite_dark[] = {0xFFFF, 0xC003, 0xA005, 0x9009, 0x8811, 0x8421, 0x8241, 0x8181, 0x8181, 0x8241, 0x8421, 0x8811, 0x9009, 0xA005, 0xC003, 0xFFFF};

  • Il suffit maintenant d'utiliser ce Sprite de la même façon que s'il était en noir et blanc, mais sans oublier d'afficher celui-ci sur chacun des plans... (Et après avoir activé les niveaux de gris, naturellement...)

 

II:\ Affichage du sprite en niveaux de gris :

    Pour afficher un sprite en 4 niveaux de gris, il convient d'utiliser le schéma suivant :

  • Activation des niveaux de gris.
  • (Éventuellement, effacer les deux plans, ce que nous ne détaillerons pas dans cet algorithme...).
  • Affichage de la partie du sprite correspondant au premier plan.
  • Affichage de la partie du sprite correspondant au second plan.
  • Désactivation des niveaux de gris.

    Pour vous permettre de mieux comprendre comment fonctionne cet affichage, je vous propose d'étudier l'exemple suivant. Il s'agit d'une "reprise" de celui que nous avons étudié au  Chapitre XII, sauf que, cette fois-ci, le sprite que nous animerons est en niveau de gris au lieu d'être en noir et blanc.

#define OPTIMIZE_ROM_CALLS
#define SAVE_SCREEN
#include <tigcclib.h>

short _ti92plus;

void _main(void)
{

  static unsigned short sprite_dark[] = {0xFFFF, 0xC003, 0xA005, 0x9009, 0x8811, 0x8421, 0x8241, 0x8181, 0x8181, 0x8241, 0x8421, 0x8811, 0x9009, 0xA005, 0xC003, 0xFFFF};
  static unsigned short sprite_light[] = {0xFFFF, 0x8181, 0x8181,0x8181, 0x8181, 0x8181, 0x8181, 0xFE7F, 0xFE7F, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0xFFFF};
// Déclaration des listes correspondant aux deux plans du sprite.

 
short key=0;
// Crée la variable de touche pressée au clavier.
 
short xxa=0;
// Crée la variable de position selon x.
 
short yya=0;
// Crée la variable de positon selon y.

  GrayOn();
  SetPlane(LIGHT_PLANE);
  ClrScr();
  SetPlane(DARK_PLANE);
  ClrScr();

  xxa=0, yya=0;
// Place la valeur 0 dans les variables de position.
  ClrScr();
// Efface l'écran.

 
do
  {

   
if(key!=0)
    {
     
Sprite16(xxa, yya, 16, sprite_light, GetPlane(LIGHT_PLANE), SPRT_XOR);
     
Sprite16(xxa, yya, 16, sprite_dark, GetPlane(DARK_PLANE), SPRT_XOR);
    }
/* Pour que le sprite ne soit pas effacé la première fois.
(quand aucune touche n'a été pressée.)*/

    switch(key)
    {                            
// Boucle qui examine la valeur de "key".
     
case 340:               // Si key vaut 340 (touche droite a été pressée).
     
if(xxa+16 < 240)     // Pour que le texte ne sorte pas de l'écran.
        xxa= xxa+2;            // Déplace le texte de 5 pixels vers la droite.
     
break;                   // Fin de ce cas.

     
case 337:              // Si key vaut 337 (touche gauche a été pressée).
     
if(xxa > 0)              // Pour que le texte ne sorte pas de l'écran.
        xxa = xxa-2;            // Déplace le texte de 5 pixels vers la gauche.
     
break;                  // Fin de ce cas.

     
case 344:             // Si key vaut 344 (touche bas a été pressée).
     
if(yya+16 < 128)   // Pour que le texte ne sorte pas de l'écran.
        yya = yya+2;          // Déplace le texte de 5 pixels vers le bas.
     
break;                 // Fin de ce cas.

     
case 338:            // Si key vaut 338 (touche haut a été pressée).
     
if(yya > 0)            // Pour que le texte ne sorte pas de l'écran.
        yya = yya-2;          // Déplace le texte de 5 pixels vers le haut.
     
break;                // Fin de ce cas.

   
}                        // Fin de cette boucle "switch()";

   
Sprite16(xxa, yya, 16, sprite_light, GetPlane(LIGHT_PLANE), SPRT_XOR);
   
Sprite16(xxa, yya, 16, sprite_dark, GetPlane(DARK_PLANE), SPRT_XOR);
// Pour dessiner le sprite à la nouvelle position.

    key = ngetchx();
// Attend qu'une touche soit pressée, et stocke sa valeur dans key.

 
}                      // Fin de la boucle "do{}".
  while(key != 264); 
// Tout ce qui a été décrit précédemment est valable jusqu'à ce qu'on appuie sur ESC.

  GrayOff();
  ClrScr();         // Efface l'écran
  DlgMessage("Au revoir !", "En espérant être utile... www.ti-fr.org", BT_NONE, BT_NONE);
// Affiche une boite de dialogue donnant l'adresse du site où vous avez trouvé ce tutorial.

}

    J'espère que cet exemple vous a permis de comprendre les bases du fonctionnement des sprites en niveaux de gris...
    Avant de passer au chapitre suivant, il faut que vous sachiez que, ici, nous n'avons étudié que la technique de dessin de sprites en mode non-masqué, mais vous pouvez aussi choisir des les dessiner en mode masqué...

Retour au menu général

Chapitre XVI


 


Copyright © Ti-Fr v2.0 1999-2002