Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AMOS - Défilement de texte
(Article écrit par Denis Bernard et extrait d'Amiga News - octobre 1993)
|
|
Adoptons ce mois-ci un style moins académique et aventurons-nous sur le terrain de prédilection d'AMOS,
l'animation, avec une routine de défilement de texte qui ravira tous les amateurs de génériques...
Facile me direz-vous ? Eh bien non, il ne s'agit pas d'un bête défilement horizontal, mais d'un défilement
vertical, en couleurs, utilisant les polices de caractères standard et qui ne s'arrête que lorsqu'il
n'y a plus de texte à afficher. Si vous utilisez plus de deux couleurs, il faudra tout de même compiler le programme !
Un peu de technique
Pour produire ce genre d'effet il a deux méthodes :
1. On ouvre un écran suffisamment grand pour contenir la totalité du défilement, et on le fait défiler
avec un Screen Offset. La taille maxi d'un écran AMOS étant 1008x1008, si le texte est trop long pour
tenir en entier dans l'écran, on passe à la solution suivante...
2. On ouvre un écran légèrement plus grand que l'affichage, on affiche le texte dans la partie de
l'écran situé hors des limites de l'affichage, et on fait défiler le tout par des copies de blocs écran.
La première possibilité est très simple de mise en oeuvre, mais elle est bien trop limitative ;
et je vous rappelle au passage que l'ouverture d'un écran de 320x1008 4 couleurs nécessite plus de
80 ko de mémoire Chip continus (ce qui risque de poser quelques problèmes de mémoire sur les petites configurations).
Optons donc pour la suivante, qui nous permet surtout d'afficher une quantité illimitée de texte, de quoi
faire un générique pour une distribution hollywoodienne !
Essayons maintenant de comprendre le principe du défilement : dans le programme, on ouvre un écran de 320x286
et on demande un Screen Display de seulement 320x256, il reste donc une bande de 320x30 (286-256) invisible
en bas de notre écran. C'est dans cette partie cachée qu'on affichera chaque ligne de texte, et pour faire
défiler l'écran vers le haut, il suffit de copier une portion de l'écran et de la replacer un peu plus haut
dans le même écran, le texte apparaissant ainsi progressivement.
Le programme
Il y a aura :
- Ouverture d'un écran de 320x286.
- Affichage de 320x256.
- Initialisation de la palette, etc.
- Initialisation du double tampon mémoire, sans lequel on obtiendrait un effet de "saccades" fort désagréable...
(notez que le programme peut cependant fonctionner sans). Le mode "Autoback 0" indique qu'on devra soi-même
faire l'échange entre l'écran physique et l'écran logique.
- Appel de la procédure _SCROLL[] avec le premier texte affiché avec la police Diamond 20.
- Appel de la procédure _SCROLL[] avec le second texte affiché avec la police Ruby 15. Note : le second texte
est un exemple de générique pour une démo (ou autre...).
- Fin.
Procédure _SCROLL[numéro du texte,écran du scroll,nom de la police,taille de la police,hauteur de l'affichage visible]
Note : la hauteur de l'affichage visible est la hauteur spécifiée avec la commande "Screen Display".
Nous voici au coeur du programme ! La seule difficulté réelle est l'utilisation de la boucle :
For J=0 To BPLANES-1
Copy Phybase(J)+A,Phybase(J)+B To Logbase(J)
Next J
|
...qui est strictement équivalente à :
Screen Copy Physic,0,SPEED,S_WIDTH*8,S_HEIGHT+SPEED To Logic
|
Si vous avez une machine rapide, vous ne verrez aucune différence, mais si vous passez en 8 couleurs,
vous verrez au premier coup d'oeil la faiblesse du Screen Copy.
Dans la version Copy... Phybase(J)+A est l'adresse en mémoire du point de coordonnées 0,SPEED. Phybase(J)+B est
l'adresse en mémoire de point de coordonnées 0,S_HEIGHT+SPEED (dans le bitplane J). On recommence l'opération
pour chaque bitplane (deux fois dans un écran 4 couleurs, trois fois dans un écran 8 couleurs, quatre
fois en 16 couleurs, etc.). Remarquez que la compréhension de cette méthode de programmation par accès direct
à la mémoire Chip n'est pas nécessaire si vous voulez exploiter cette routine dans vos programmes.
Vient ensuite la boucle qui suit se chargeant de lire chaque ligne de texte et d'interpréter les commandes
(changement de couleur, accélérations, pauses, saute une ligne si on est en mode saut de page, etc.).
Et enfin, les lignes de Data(s) où sont placés les textes (ligne par ligne) numérotés tout simplement par des
numéros de lignes BASIC :
1
Data "ligne 1","Ligne 2","Ligne 3",... <- texte 1
...
Data "\f" <- indique fin du texte
2
Data "ligne 1","Ligne 2","Ligne 3",... <- texte 2
...
Data "\f"
3
etc.
|
Format du texte : chaque ligne de texte est encadrée entre apostrophes (') ou entre guillemets "quotes" (").
Si le premier caractère d'une ligne est un "Back Slash" (\), celle-ci ne sera pas affichée mais
interprétée comme une commande, qui agira sur l'affichage des lignes suivantes.
Commandes disponibles ("X" est un nombre entier) :
- \sX : vitesse avec X > 0, 1 étant la vitesse la plus lente.
- \aX : accélération/décélération. Fait varier la vitesse de +/- 1 à chaque nouvelle ligne affichée jusqu'à ce
que la vitesse soit égale à X.
- \iX : ink. Affiche les lignes suivantes avec la couleur X.
- \pX : pause. Marque un temps de pause de X 50e de seconde.
- \c : saut de page. Vide l'écran avant d'afficher la ligne suivante.
- \t : attend que l'utilisateur appuie sur une touche ou un bouton de la souris.
- \f : fin du texte. Sortie de la procédure _SCROLL[].
Procédure GT FONT[Nom police,taille]
Cette procédure recherche la police demandée dans la liste des polices disponibles (ne pas oublier de
placer une commande "Get Fonts" au début de votre programme !), et la sélectionne (commande "Set Font").
Exportation, suggestions
Pour réutiliser cette routine dans vos propres programmes, il faut prévoir la hauteur maximale de police
à afficher ainsi que la vitesse maximale, que nous appellerons HAUT_MAX et VIT_MAX. Ensuite, définir la
hauteur de votre affichage (en général 256 lignes pour nous européens - norme PAL - ou 200 lignes outre-Atlantique -
norme NTSC), que nous appellerons HAUT_AFF. On doit ouvrir soi-même l'écran dans lequel le texte va défiler
(ce qui permet de l'ouvrir en mode double champ de jeu...) avec les spécifications suivantes :
Screen Open X, LARGEUR, HAUT_MAX+VIT_MAX +HAUT_AFF, NB_COULS, RESOL
Screen Display X,,,,HAUT_DISP
|
...avec "X" de 0 à 7 (numéro que vous transmettez à la routine par le paramètre "ECRAN"),
LARGEUR : 320 de préférence, NB_COULS : 2 à 8 couleurs, et RESOL : Hires/Lores.
Dans le programme d'exemple, on a : X=0, LARGEUR=320, HAUT MAX=20, VIT MAX=10, HAUT AFF=256,
NB_COULS=4, RESOL=Lores. Supposons maintenant que N_TEXTE soit le numéro du texte que vous voulez afficher
(avec la police Topaz 11 par exemple), on appelle la procédure _SCROLL[] :
_SCROLL[N_TEXTE, X, "topaz", 11, HAUT_AFF]
|
Et voilà ! Maintenant que le générique de votre démo ou de votre jeu est fait, vous n'avez plus aucune
excuse pour ne pas nous préparer de bonnes disquettes pleines de couleurs et d'animations !
Quoique... une bonne sieste...
|