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 - AMAL, le langage de l'animation
(Article écrit par François Lionet et extrait d'Amiga News Tech - novembre 1990)
|
|
Le plus simple des jeux d'arcade est déjà constitué d'un grand nombre d'objets animés en même temps
sur l'écran. Déplacer au 1/50e de seconde 20 personnages à la fois est une tâche ardue pour un BASIC,
même compilé. AMOS se devait d'être un outil pour la création simple de jeux rapides. Il fallait donc
trouver quelque chose ! AMAL est le résultat de longues soirées de cogitations et nuits de programmation.
C'est certainement l'un des points fort d'AMOS. Aujourd'hui commence une série d'articles dans lesquels
j'espère vous en faire découvrir la puissance.
AMAL c'est quoi ?
- L'abréviation de AMos Animation Langage,
- Un véritable langage, comportant plus de 35 instructions, d'une syntaxe proche du BASIC.
- Précompilé, volontairement simplifié pour en accélérer l'exécution et atteindre ainsi une
vitesse proche du langage machine (et une compilation ultra-rapide !).
- Exécuté en interruptions, indépendamment du programme principal, celui-ci se contente de
regarder la position des personnages, et de gérer les collisions.
- Un multi-compilateur : on peut exécuter en même temps pas moins de 64 programmes AMAL.
En comptant le programme AMOS lui-même, 65 programmes tournent dans votre Amiga !
- Un moyen de simplifier énormément la programmation d'animations complexes et répétitives.
- L'extension des instructions d'animations du STOS.
Enfin en lisant ce qui précède, vous comprenez certainement que je suis assez content du résultat.
Qu'un programmeur me jette la première pierre !
Principes généraux
Les exemples qui vont suivre doivent être tapés en mode direct. Vous devez charger une banque de
sprites de la disquette DATA :
Load "AMOS_DATA:Sprites/Octopus.Abk"
|
Maintenant, tapez la ligne suivante pour changer la palette de couleurs :
Le premier programme AMAL
Les programmes sont transmis au compilateur AMAL sous la forme de chaînes de caractères, par
l'instruction :
"Canal" est le numéro du canal d'animation. Nous en reparlerons plus loin. "Chaîne"
est le programme d'animation lui-même.
Tapez l'exemple suivant (en mode direct, en ayant chargé la banque de sprite avant).
Respectez scrupuleusement les majuscules et minuscules !
Une pieuvre apparaît sur votre moniteur. C'est elle que nous allons faire bouger.
Rien ne se produit en apparence, mais votre chaîne vient d'être compilée et stockée en mémoire.
Pour lancer le mouvement, tapez :
La pieuvre glisse lentement en bas à droite. Notez que vous pouvez taper du texte au clavier,
ou exécuter des instructions : la pieuvre continue à se mouvoir.
La chaîne AMAL
Le programme AMAL de l'exemple précédent était réduit à une seule instruction :
Voici les principaux points à connaître :
- Le compilateur AMAL ne reconnaît que les majuscules, les chiffres et les opérateurs
dans la chaîne.
- Tous les autres caractères sont ignorés (minuscules, espaces, ponctuation, codes de contrôle...).
- Une instruction AMAL n'est constituée que de une ou deux lettres majuscules. L'instruction
utilisée dans l'exemple était "M". Notre petit programme peut s'écrire comme nous l'avons fait, mais
aussi :
Ou bien :
"Move le beau sprite sur le bel écran, 100 en X,50 en Y,200"
|
- D'une manière générale, pour de longues chaînes, il vaut mieux éviter les extrêmes !
N'utiliser que les majuscules rendra le programme extrêmement difficile à comprendre plus tard.
Un peu plus compliqué...
Nous allons améliorer un peu le mouvement de notre pieuvre. Tapez en mode direct :
Amal 1,"Anim 0,(1,2)(2,2)(3,2)(4,2); Move -100,-50,400"
Amal On
|
La pieuvre retourne à sa position initiale en agitant les bras ! Le programme AMAL produit outre
la coordonnée X et Y, le numéro de l'image à afficher. C'est en faisant varier ce numéro que l'on
obtient l'animation des bras.
En avant-goût du mois prochain, voici la fonction de l'instruction Move que nous utilisons beaucoup
dans nos exemples.
"Move" initialise un mouvement entre la position actuelle du canal (X et Y) et la position finale
(X+DX,Y+DY). En fait, AMAL trace une droite entre les deux points. "NombreDePas" spécifie la vitesse
du mouvement :
- M 100,100,100 : le sprite dessinera une ligne diagonale, 1 pixel chaque 1/50e de seconde, en 2 secondes.
- M 100,100,50 : le sprite fera le même chemin en 1 seconde.
- M 100,100,1 : le mouvement sera instantané.
DX et DY peuvent être nuls (pas de mouvement) ou négatifs (mouvements à gauche ou vers le haut).
Le canal d'animation
Nous appellerons dorénavant chaque programme AMAL un "canal d'animation". Le canal d'animation produit
trois choses :
- Une coordonnée en X.
- Une coordonnée en Y.
- Un numéro d'image.
AMOS permet d'exploiter au maximum les trois chiffres de chaque canal. Vous pouvez en effet choisir
leur destination avec l'instruction CHANNEL.
CHANNEL canal TO SPRITE num
C'est le mode que nous avons utilisé sans le savoir dans l'exemple. Les chiffres servent à déterminer
la position d'un sprite matériel.
- "canal" est le numéro du canal d'animation (le même numéro que celui de l'instruction AMAL).
- "num" est le numéro du sprite qui sera animé.
Lorsque AMOS apparaît, il effectue automatiquement l'équivalent du programme suivant :
For N=0 To 63
Channel N To Sprite N
Next
|
Chaque canal animera le sprite de même numéro. L'exemple a utilisé le sprite 1 et le canal 1.
Les lignes suivantes ne donneront aucun résultat :
Amal 2,"Move 100,100,100"
Amal On
|
Le canal numéro 2 est initialisé. Les coordonnées sont produites, vers le sprite 2... qui n'existe pas !
Rien ne bougera à l'écran.
CHANNEL canal TO BOB num
Certainement le plus intéressant. Cette instruction dirige la sortie du
canal vers le BOB de numéro num. Comme précédemment, il faut que le BOB soit affiché pour voir un
résultat. Tapez les lignes suivantes (vous devez toujours voir la première pieuvre bouger
sur votre écran !) :
Tout d'abord, on affiche un BOB. Notez le clignotement d'une des couleurs dû au curseur.
...et ça ne clignote plus.
Redirige la sortie du deuxième canal vers notre BOB. Pour l'exemple, nous n'avons pas pris
des numéros identiques entre le canal et le BOB, mais dans vos programmes, je vous conseille
fortement de le faire.
Amal 2,"L: Move 100,0,100; Move -100,0,100; Jump L"
Amal On
|
Démarre un nouveau programme dont nous verrons les instructions dans un prochain article.
Vous avez maintenant deux canaux qui fonctionnent en même temps, un pour chaque pieuvre.
CHANNEL canal TO SCREEN DISPLAY num
De plus en plus amusant. Les coordonnées du canal vont servir à calculer la position
de l'écran numéro num (comme l'instruction SCREEN DISPLAY). Tapez les lignes suivantes :
Channel 3 To Screen Display 0
Amal 3,"L: Move 0,25,5; Move 0,-25,5; Jump L"
Amal On
|
Et voilà notre troisième canal en fonction. Impressionnant, non ? Notez que le BOB suit l'écran, et
que le sprite reste indépendant. Un sprite matériel "survole" le terrain de jeu. Cette faculté
peut être extrêmement utile dans certains jeux (par exemple le vaisseau du joueur dans un clone
de Defender).
CHANNEL canal TO SCREEN OFFSET num
Idéal pour faire des défilements. Les coordonnées produites par le canal d'animation ont le même
effet que l'instruction SCREEN OFFSET. Les lignes suivantes vont rendre l'affichage encore plus
insupportable :
Channel 4 To Screen Offset 0
Amal 4,"L: Move 320,0,20; Move -320,0,20; Jump L"
Amal On
|
Excusez-moi, je vais chercher un cachet d'aspirine pour observer le résultat !
Nous en sommes à quatre canaux simultanés.
CHANNEL canal TO RAINBOW num
AMOS peut facilement produire des dégradés de couleurs avec le Copper. On peut les animer avec un
canal d'animation. Dans ce cas :
- La coordonnée en X est affectée à la base de "l'arc-en-ciel".
- La coordonnée en Y est la ligne d'écran où commencera l'effet.
- Le numéro d'image change la hauteur de l'arc-en-ciel.
Et hop, ajoutons encore un canal à notre exemple :
Set Rainbow 0,0,64,"(1,1,15)(1,-1,15)","",""
Rainbow 0,56,1,255
|
Et apparaissent les couleurs !
Channel 5 To Rainbow 0
Amal 5,"L: For R0=0 To 63; Let X=R0; Next R0; Jump L"
Amal On
|
Et les couleurs défilent. Remarquez au passage que l'on peut faire des boucles For/Next en AMAL. Nous
les détaillerons plus tard.
Nous avons terminé l'exploration des instructions CHANNEL. Il ne reste plus qu'une chose à voir
avant de terminer, une variante de l'instruction AMAL qui ouvre de nouvelles perspectives :
AMAL canal,"Chaîne" TO adresse
En spécifiant une adresse mémoire après la chaîne de caractères, on indique à AMAL un endroit
où stocker les coordonnées. Cette adresse doit être paire, et dans un espace mémoire réservé
à cet effet. Le mieux est de réserver une petite banque de mémoire :
Réserve As Work 10,16, puis
Amal canal,"Chaine" To Start(10)
|
Attention : n'utilisez pas une chaîne de caractères comme espace de travail. Les adresses
des chaînes sont souvent déplacées en mémoire : l'adresse fournie à l'instruction AMAL
peut être changée au moment même où le canal d'animation stocke les coordonnées. Le plantage
total de la machine serait alors fort probable !
Vous pouvez ensuite récupérer les coordonnées du canal l'animation avec DEEK. Dans notre exemple :
Start(10): Drapeau: Bit 0 indique que X est modifié
Bit 1 indique que Y est modifié
Bit 2 indique que l'image est modifiée
Start(10)+2: X
Start(10)+4: Y
Start(10)+6: Image
|
Je pense que vous avez assez admiré les exemples que nous avons tapés jusqu'à maintenant. Appuyez sur
"Esc" pour revenir sous l'éditeur et entrez le programme suivant :
Quelques remarques :
- Le programme précédent est bien entendu complètement nul. Le résultat est totalement désastreux
(c'est un émulateur ZX81 pour ceux qui ont connu !), mais c'est un excellent exemple de récupération
des coordonnées produites par un canal d'animation.
- Il faut absolument arrêter le canal à la fin du programme : les banques de mémoire sont effacées
avant les canaux d'animation. Avec un peu de malchance, les coordonnées seront stockées en mémoire
entre l'effacement de la banque et l'arrêt du canal, d'où plantage possible. Cela vient justement de
m'arriver. Hum...
Voilà, c'est tout pour aujourd'hui. Le mois prochain nous verrons en détail les principales
instructions d'AMAL. Vous pouvez en attendant explorer les exemples se trouvant sur la disquette
Langage de l'AMOS et concernant AMAL:dossier Manual/Chapter_14/. D'ici là, bon AMOS et bon AMAL !
|