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 - Effets de transition
(Article écrit par Denis Bernard et extrait d'Amiga News - janvier 1994)
|
|
Comme je vous l'ai montré le mois dernier,
on peut vraiment réaliser de chouettes effets avec bien peu de choses, comme par
exemple, un effet de transition d'une image à une autre en quelques lignes d'AMOS.
Il ne s'agit pas là d'utiliser les commandes "Appear" ou "Fade" dont
les applications sont vraiment restreintes, mais une routine maison
qui fait apparaître progressivement l'image sous la forme d'une mosaïque.
Quelques mots sur les transition
Pour ceux qui ne le sauraient pas, ce qu'on appelle transition est le passage
d'une image affichée à l'écran à une autre image. Cela peut se passer de différentes
façons, la plus courante étant d'afficher directement la seconde image.
On peut aussi passer par un "Fade" : les couleurs de l'image actuelle deviennent
toutes progressivement noires (ou d'une autre couleur) puis on exécute l'opération
inverse pour laisser apparaître progressivement la seconde image.
Il y a ensuite les méthodes par superposition : la seconde image recouvre progressivement
l'image actuelle pour finir par prendre complètement sa place à l'écran.
C'est ensuite la façon dont le recouvrement se fait qui permet d'obtenir encore d'autres
effets (rideau, escalier, mosaïque, volet...).
Parmi les transitions que je n'ai pas citées, il y a celles agissant directement sur
le "Screen Display" de l'écran courant, en le faisant disparaître vers le haut ou
vers le bas, ou sur le "Screen Display" de l'écran à afficher, en le faisant
arriver par le haut ou par le bas et par-dessus l'écran courant. Après ce petit
tour d'horizon, nous allons étudier de plus près le programme mettant en oeuvre
une transition par superposition des deux images, celle que j'ai appelée mosaïque.
Le nom n'est peut-être pas fabuleux mais il est assez représentatif de l'effet obtenu.
Le programme
Il s'agit de faire apparaître une image à l'écran par petits carrés
(ici de 8x8 pixels) et à des positions aléatoires. En effet, il y aurait
bien peu d'intérêt à les afficher les uns à la suite des autres ligne par ligne,
bien sagement. Partons donc du fait que nous avons deux écrans (l'un affiché,
l'autre caché, dans lequel on travaille) de largeur SX et de hauteur SY.
Chaque carré est de côté BSIZE. Notez qu'il est préférable que SX et SY
soient des multiples de BSIZE et que la transition devient très lente si vous
prenez une valeur inférieure à 4 pixels.
Le calcul du nombre de carrés est assez simple : SX/BSIZE en largeur et SY/BSIZE
en hauteur, ce qui nous donne un total de NBT=SX*SY/BSIZE^2.
Pour faire apparaître aléatoirement chacun de ces carrés, on utilise un
tableau de NBT éléments dans lequel on va mettre aléatoirement toutes
les valeurs entre 0 et NBT. En fait, c'est comme si on battait un jeu
de cartes. Pour y arriver, on initialise d'abord le tableau avec toutes
les valeurs de 0 à NBT (dans l'ordre), et à chaque fois
qu'on mélange les cartes (procédure SHUFFLE) on échange le contenu de deux éléments
du tableau pris au hasard, et on recommence NBT fois. Cette méthode n'est pas excellente
statistiquement mais elle convient parfaitement pour notre application et en
plus elle est très très rapide. Si vous souhaitez vous essayer sur ce genre
de routine, n'oubliez pas que chaque valeur ne doit apparaître qu'une seule fois dans le tableau !
Ensuite, il ne reste plus qu'à exploiter le contenu de notre tableau (qui contient des
valeurs entre 0 et NBT-1). C'est le rôle de la procédure T_TRANSIT
qui pour chaque élément du tableau T(), calcule les coordonnées du carré
correspondant et le copie de l'écran 1 vers l'écran 0.
J'allais oublier de vous parler de la procédure DESSIN qui dessine n'importe quoi dans
l'écran 1. Vous pouvez donc la remplacer par un "Load Iff",
ou tout autre façon de le remplir, adaptée au contexte dans lequel vous allez
réutiliser cette routine.
Conclusion
Voilà, vous n'avez plus qu'à taper ce magnifique programme dans votre éditeur,
à le lancer et à appuyer sur une touche lorsque le son de la cloche se fait entendre.
|