Obligement - L'Amiga au maximum

Lundi 29 mai 2017 - 15:22  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


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 standards 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 dual playfield...) 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...

AMOS
AMOS
AMOS
AMOS


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]