Mise a jour : 4 juillet 97
e
RPL, bien utiliser, (surtout sur la GX) permet de faire des animations sympas, mais
on en cherche encore l'utilité. Si on ne fait que des trucs utiles, à mon
avis, on risque de s'ennuyer ferme.
Je considère que les bases de la programation sont aquis.
Déplacement linéaire Collage compliqué Scroll de texte Flash Problème de vitesse Tour du monde Tremblement Vider la poubelle Exemple |
Le plus simple est de commencer dans un nouveau directory. Pour des raisons de faciliter d'utilisation, il vaut mieux stocker les grobs tous seul et découper l'histoire en séquence. Il suffit ensuite de faire un programme qui appel toutes les séquences.
Pour les animations il vaut mieux utiliser PICT et {#0 #0} PVIEW que ->LCD
, l'image est plus nette. Si l'animation se contente d'afficher un suite de grob,
il sera alors préférable d'utiliser ANIMATE.
Pour rappel, voici les arguments d'ANIMATE
n+1:image n ... 2:image 1 1:n ou { n {#x #y} t i} |
n : nbre d'image {#x #y} : position de l'image t : durée de chaque image i : nombre déxécution de la boucle |
On commence le premier programme par {# 0d #0d} PVIEW
comme ça,
il suffit de modifier PICT pour avoir une animation propre et net.
Il faut prévoir un nombre de blanc égale au pas de l'animation sur le
coté opposé au mouvement. L'abssice ou l'ordonée de la position d
l'image est le compteur d'une boucle.
Voici un exemple: 0 131 FOR a PICT a R->B {# 10d} + DESSIN REPL NEXT
DESSIN est un GROB avec sa premier colonne blanche, comme ça, il s'efface au
fur et à mesure de son déplacement.
Il est possible de jouer sur se blanc en mettant quelque pixel noir, on peut ainsi
allonger un dessin.
Lorsque l'on utilise l'une des trois fonctions HP pour coller un grob (REPL, GOR
ou GXOR), elle est définit dans un rectangle.
Pour palier à ça, il faut faire un second grob avec la silouhette de l'image.
On peut aussi le faire légerement plus grand pour que l'image soit entouré
d'un blanc. Voici l principe:
PICT {#1d #1d} silouhette 3 DUPN GXOR 3 DUPN GOR 3 DUPN GXOR DROP image GOR
Il est tout à fait possible d'inclure ce morceau dans une boucle.
Utilisation classique de la fonction SUB:
7 1 FOR a PICT {#1d #1d} "BONJOUR" a 7 SUB 1 ->GROB REPL ,01 WAIT
-1 STEP
Il faut régler la temporisation au feeling. On même faire défiler
un grand speech comme ça, il suffit de remplacer le premier 7 par la taille
du texte et le second par a 7 +
par exemple
Pour avoir un flash rapide et localisé, on le prépare dans la pile avant
de le lancer avec ANIMATE.
Pour faire flasher 5 fois le rectangle compris entre {#1d #1d} est {#25d #25d} par
exemple:
PICT {#1d #1d} {#25d #25d} SUB DUP NEG { 2 {#1d #1d} 0,1 5} ANIMATE 3 DROPN
Pour pouvoir avoir une animation fluide qui ne soit pas une suite de grobs déja
tout pret( gourmand en place), il faut ruser:
On affiche une image statique pendant que l'on construit les grobs dans la pile puis
on lance ANIMATE. C'est comme ça qu'est fait Angel.
Pour faire un scroll qui fasse 3 fois le tour du monde, il suffit de recupérer
une carte du monde qui face 131*64 pixel et de faire varier les coordonnées
de la fenètre:
#131 #128 PDIM PICT {#0d #0d} carte REPL PICT {#131d #0d} carte REPL 1 3 START
0 128 FOR a a R->B { #0d } + PVIEW NEXT NEXT
Il est aussi de ne pas finir son tour.
Pour faire trembler, il faut faire varier de manière aléatoire
les coordonées de la fenêtre, par exemple faire trembler la pile jusqu'a
ce que l'on apuie sur une touche:
<< #141d #74d PDIM PICT {#5d #5d} LCD-> REPL DO {} 1 2 START RAND
10 * R->B + NEXT PVIEW UNTIL KEY END DROP >>
Aprés différent essais, vouv vous serais vite rendu compte que la HP,
de temps en temps s'arrete quelques instants, puis repart. Elle effectue ce qui s'appelle
un Garbage Collector. Le probléme et qu'elle ne le fait lorsqu'elle y
est obligée, et c'est long. Pour la forcer à en faire le ménage plus
souvent, et quand on veut, il faut inclure des MEM DROP
régulierement
dans l'animation. L'astuce que j'ai trouver est de découper l'animation en séquences.
Un programme principal appelle les séquences (ça facilite grandement le
débogage). Le truc est d'intercaller un MEM DROP
entre chaque séquences.
Voici un exemple de programme principal qui qppelle les séquences DEBUT, MILIEU
et FIN :
<< 1 3 FOR a MEM DROP { DEBUT MILIEU FIN} a GET EVAL NEXT >>
La fin de le mondeCette animation (bientot disponible) contient tous les points expliqués precedement. |
Club HP|Annonces| HoPsy| Mail| Débutant| Bricolage| Programation| IRC| Liens |