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 : GFA Basic - Infinite infinie
(Article écrit par Pierre-Philippe Launay et extrait d'Amiga News Tech - avril 1992)
|
|
Aujourd'hui, nous allons revisiter les célèbres BOB illimités. Oui mais voilà, nous sommes en GFA,
l'un des langages es plus rapides du moment.
Ce type de codage, qui fait baver d'envie tous les ataristes, ne nécessite que deux algorithmes :
je n'utilise que des entiers courts et je fais appel au multi tampon mémoire.
La puissance du GFA et de l'Amiga feront le reste. Tout d'abord, il faut savoir qu'aucun langage ne sait
calculer très rapidement les nombres pseudo-réels. La routine "met.inline" servira donc à créer les
fichiers des résultats précalculés X.INL et Y.INL que nous mettrons ensuite en INLINE posx et INLINE posy
avant d'éliminer ladite routine. Notez ici l'emploi des fonctions COSQ et SINQ, 16 fois plus rapides que
les fonctions COS et SIN : elles se contentent en effet de piocher dans une table, sans avoir à calculer
comme le font COS et SIN.
Le multi tampon mémoire
Cet artifice permet de créer l'illusion du mouvement. Chaque objet passe par les mêmes positions que son
prédécesseur. Il se passe également plusieurs étapes avant toute nouvelle création qui allongera la file.
Bien. Comment faire ? Avec un seul objet, il suffirait de créer des écrans portant diverses positions de cet
objet, pour donner une impression de déplacement périodique, grâce à un affichage cyclique des écrans. Ici,
on ajoute simplement un objet supplémentaire sur une nouvelle position quand le cycle est terminé. On obtient
alors un déplacement, mais celui-ci reste saccadé. On généralise à chaque étape du cycle et cela crée le
mouvement, tout en ne gérant en fait qu'un seul objet à la fois.
Mode haute résolution 32 couleurs
Continuons l'illusion. L'Amiga ne sait pas afficher des écrans de 640 de large et 32 couleurs.
Qu'à cela ne tienne, il faudra utiliser la ruse révélée sur les disquettes AMOS et consistant
à redessiner des polices de caractères.
La compilation
Il reste un problème. Ôtez les commentaires de la procédure son et, sur un A3000 ou en mode compilé,
le code révélera alors le bogue classique du manque de synchronisation : le compilateur GFA donnera un
programme beaucoup trop rapide par rapport au programme source interprété. Le désassemblage de l'exécutable
sous Devpac montrera qu'on ne peut pas optimiser en rapidité, et c'est là le problème, car le mode interprété
est loin d'être aussi rapide que le mode compilé. Le code mis ici en remarque donnerait sur le son des
effets plutôt curieux si on ne prend pas garde de rajouter une temporisation avec la fonction DELAY.
Bien. À propos de compilateur, je rappelle que les ADD, SUB et autres MUL qui alourdissent la clarté en
interprété ne sont plus utiles mais que par contre, il est bien sûr nécessaire d'utiliser les bons formats
de paramètres pour les fonctions GFA destinées à la compilation : ce sont en général des sprites de type
LONG%, notés "ivar" dans le manuel. Compilez avec les options Interruption, Mémoire 120000 et Table des
symboles (*& %3 S& I+ F<m120000 et -s). Pour améliorer le score de 25 objets par seconde, faites jouer
le son moins souvent et utilisez le eider de façon à ne travailler que sur deux plans
de bits.
A bientôt et bon amusement.
|