Obligement - L'Amiga au maximum

Samedi 17 novembre 2018 - 03:06  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · 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 en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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


Contact

David Brunet

Courriel

 


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  ;

Move 100,100,100

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

Move 100,100,101

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

PLay numéro;

Ou :

PL numéro

N'oubliez pas le "L" majuscule sinon le compilateur AMAL prendrait votre PLay pour une Pause ! Exemple :

"PL 1"

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.

PLay1: dc.w Vitesse

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 :

dc.w EnrgY-PLay1

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 :

dc.b 0

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 :

AMOS
AMOS
AMOS
AMOS

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 !


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