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 - Les principales instructions d'AMAL (deuxième partie)
(Article écrit par François Lionet et extrait d'Amiga News Tech - janvier 1991)
|
|
Trois instructions d'AMAL permettent de réaliser mouvements et animations : Move, Anim et PLay.
Pour mieux utiliser cette dernière, nous allons détailler le codage et l'enregistrement des mouvements
dans la banque AMAL.
L'instruction Move
Je vais être bref, car nous en avons déjà parlé il y a deux mois.
Move est l'instruction idéale pour faire bouger les objets AMAL en ligne droite :
Move DeltaX,DeltaY, Nombre de pas
|
Move trace une ligne entre la position actuelle de l'objet (X,Y) et la position (X+DeltaX,Y+DeltaY).
DeltaX et DeltaY peuvent être négatifs, pour provoquer des mouvements vers la gauche et le haut
respectivement. Cette droite sera parcourue en "Nombre de pas" fois. Ainsi, la valeur 1 provoquera un
déplacement instantané, et une plus grande valeur ralentira le mouvement. La vitesse de déplacement
peut ainsi être très précisément fixée. La contrepartie de ce système est une irrégularité pour certaines
valeurs.
Exemple ;
...trace une diagonale à 45° vers la droite et le haut de l'écran. Tous les 1/50e de seconde, l'objet
bouge de 1 pixel en X et Y exactement.
...trace la même droite, mais en 1/50e de seconde de plus au milieu du cheminement, l'objet marquera
une pause de 1/50e. Le résultat sautera aux yeux. Il faut choisir une valeur multiple de la distance à
parcourir, par exemple 50, 25, 20, 10, etc.
Pour optimiser au maximum l'algorithme de calcul de la droite, j'ai dû limiter à 128 le déplacement
maximum autorisé par pas de déplacement. Une instruction telle que Move 320,200,1
ne fonctionnera pas correctement.
L'instruction Anim
Comme son nom l'indique. Anim est dédiée à la production d'animations : elle modifie le numéro de l'image
produit par le canal. Sa syntaxe est :
Anim cycle,(image,délai)(image,délai)...
|
- "(image,délai)" sert à définir chaque pas d'animation. Les parenthèses sont indispensables.
- "image" pointe dans la banque de sprites.
- "délai" est le nombre de 1/50e de seconde pendant lequel l'image reste affichée avant de
passer à la suivante.
- Lorsque l'instruction Anim a terminé la dernière parenthèse, elle peut soit recommencer au début,
soit se terminer.
- "cycle" contient le nombre de tours à effectuer. Zéro indique une animation sans fin.
Anim est une instruction non bloquante, la seule du genre en AMAL. En effet, un canal doit
être capable de produire une animation et en même temps des coordonnées en X et Y. Lorsqu'AMAL
rencontre un Anim, il initialise les paramètres et passe immédiatement à l'instruction suivante
(généralement un Move).
En conséquence, il faut toujours mettre Anim avant Move ! De plus, je vous recommande de mettre
un point-virgule après la dernière parenthèse de Anim : le compilateur AMAL a la fâcheuse
tendance à produire des erreurs de syntaxe sur les Anims.
Exemple d'animation d'un personnage marchant de gauche à droite :
"Anim 0,(1,3)(2,3)(3,3)(4,3); Move 320,0,320"
|
L'instruction PLay
Move est parfait pour des déplacements simples, en ligne droite. PLay a été conçue pour produire les
mouvements plus complexes, préalablement enregistrés dans la banque de mémoire numéro 4 (ou banque AMAL).
Rejouer un enregistrement
PLay permet de rejouer en interruptions un tel mouvement. La syntaxe est :
Ou :
N'oubliez pas le "L" majuscule sinon le compilateur AMAL prendrait votre PLay pour une Pause !
Exemple :
Structure de la banque AMAL
PLay lit les mouvements stockés sous forme codée dans la banque AMAL. Pour vous permettre d'enregistrer
vos propres mouvements dans cette banque, nous allons détailler sa structure.
La banque AMAL contient à la fois les enregistrements PLay et les chaînes de mouvement tapées sous
l'éditeur. Le premier mot long pointe sur ces chaînes :
Start(4): dc.l Chaînes-Start(4)
|
Vient ensuite le nombre maximum d'enregistrements, il est de 48 avec l'éditeur AMAL.
Vous pouvez bien sûr en avoir plus.
PlayBase: dc.w Nombre de play
|
Suit une liste de pointeurs sur chacun des 48 enregistrements, "zéro" indiquant un PLay vide.
dc.w (PLay1-PLaybase)/2
dc.w (PLay2-PLaybase)/2
dc.w (Play48-PLaybase)/2
|
Suivent les noms des mouvements, avec 8 lettres pour chacun :
dc.b "Nom 1 "
dc.b "Nom 2 "
dc.b "Nom 48 "
|
Nous arrivons à l'enregistrement proprement dit. En premier la vitesse. "1" signifiant une animation
au 1/50e, "2" tous les 2/50e, etc.
Un enregistrement se compose d'un mouvement en X et d'un mouvement en Y. Suit donc un pointeur sur
les déplacements en Y :
Nous arrivons enfin au codage des déplacements. Ce codage est effectué par octet, il peut donc
avoir une longueur impaire. Voyons le principe du codage :
- Un octet nul signifie la fin de l'enregistrement.
- Le bit numéro 7 sert d'indicateur. Deux cas peuvent se présenter :
- BIT 7=0 : les 7 autres bits de l'octet contiennent sous forme signée, la valeur du
déplacement à ajouter à la coordonnée de l'objet. Le déplacement peut donc avoir de valeurs maximales
de -64 à +63. Une fois cette addition effectuée, AMAL pointe l'octet suivant.
- BIT 7=1 : les 7 autres bits indiquent à AMAL le nombre de 1/50e de seconde à attendre avant
de passer à l'octet suivant. On comprend que lorsque l'on bouge la souris régulièrement au
moment de l'enregistrement du déplacement, le programme créera un octet tous les 1/50e de seconde.
La compression est plus avantageuse pour des mouvements plus lents : en restant immobile, on ne
consomme qu'un octet tous les 128 50e de seconde.
Revenons à la banque de mémoire. Un enregistrement doit toujours commencer et se terminer par un
zéro, pour marquer les limites en avant et en arrière.
dc.b 0
dc.b Dep,Dep,Dep,Dep
dc.b 0
|
Suit l'enregistrement des déplacements en Y :
EnrgY: dc.b 0
dc.b Dep,Dep,Dep,
dc.b 0
|
Si l'adresse est impaire, il faut ajouter un zéro :
Suivent ensuite tous les autres enregistrements s'ils existent. Pour mémoire, voyons la deuxième partie de
la banque, qui contient les chaînes de mouvement tapées sous l'éditeur AMAL. En premier, le nombre de chaînes
(16 ou 64 si vous êtes en mode SYNCHRO OFF) :
Chaînes : dc.w Nombre de chaînes
|
Suit une liste de pointeurs sur chacune des chaînes, la première (numéro ZERO) étant la chaîne de
définition de l'environnement :
dc.w (Ch0-Chaînes)/2
dc.w (Ch1-Chaînes)/2
dc.w (Ch16-Chaînes)/2
|
Puis, les chaînes elles-mêmes, précédées de leur longueur respective :
Ch0: dc.w Longueur0 (zéro si vide)
dc.b "Le texte tapé sous l'éditeur AMAL",$7E
dc.b "NB: les retours de ligne sont marqués par",$7E
dc.b "le code:",$7E
Ch1: dc.w Longueur1
dc.b "texte 1"
dh16: dc.w Longueur16
dc.b "texte16"
|
Enregistrer ses mouvements
L'éditeur AMAL
L'éditeur AMAL se trouve sur la disquette Extras (AMAL_Editor.AMOS). Vous trouverez aussi sur
cette disquette un fichier expliquant en détail son fonctionnement. En résumé : choisissez
l'option "PLAY Editor" dans le menu "Edit", puis "Record" dans le menu "Movement".
Lorsque vous bougerez la souris, le programme codera tous les déplacements dans la banque AMAL.
Bien sûr, n'oubliez pas de sauver la banque, et de la charger dans votre programme !
Votre propre enregistreur
La partie enregistrement de mouvements de l'éditeur AMAL est limitée au strict minimum. Il est
par exemple impossible de faire des figures géométriques (tracer un cercle parfait à la souris
nécessite un sacré tour de main !).
Je ne vais pas vous donner le listing d'un éditeur de PLay complet, mais vous fournir tous
les éléments pour en programmer un. Toutes les routines de fabrication de la banque AMAL
se trouvent dans le programme AMAL_Editor.AMOS. Il suffira de faire un bloc et de les recopier
dans le programme, sans même avoir besoin de les ouvrir !
Quelques fonctions agréables dans un éditeur PLay :
- Pouvoir arrêter l'enregistrement, revenir en arrière, faire des blocs de mouvement, transférer
les blocs d'un mouvement à l'autre.
- Pouvoir tracer des figures géométriques (comme dans l'exemple) cercles, rectangles, courbes de
Bézier (ha ! une attaque d'aliens en courbe de Bézier, quel régal !).
- Pouvoir rejouer au pas à pas.
- Etc.
Enregistrement de mouvements PLay :
Nous n'avons pas encore fini de parler de PLay : il reste à voir les possibilités de contrôle du
mouvement à partir du BASIC, ce que nous ferons le mois prochain. En attendant, AMOSsez bien !
|