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

Départ

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.


Déplacement linéaire

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.


Coller des images avec un cadre non rectangulaire

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.


Faire apparaitre du texte

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


Effet de Flash

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


Probl&egraveme de vitesse

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.


Effet tour du monde

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&egravetre:
#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.


Faire trembler une image

Pour faire trembler, il faut faire varier de mani&egravere 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 >>


Vider la poubelle

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


Exemple complet

La fin de le monde

Cette animation (bientot disponible) contient tous les points expliqués precedement.


N'hésiter pas à me mailer une de vos animations, si elle vous parait sympa.

©zeHP

Club HP|Annonces| HoPsy| Mail| Débutant| Bricolage| Programation| IRC| Liens