|
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
|
| |
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é :

- 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 :

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 :

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
|
|