Tutoriel/Script Scheme
De WikiPlee.
L'utilisation d'un script Scheme permet d'automatiser la construction de l'image des frames d'une animation. En effet, faire cette étape en reportant manuellement les frames à partir d'une image source peut vite devenir laborieux. D'autant plus si des modifications doivent être portées après coup. Ce tutoriel décrit la construction d'un tel script adapté à l'animation du tutoriel « créer une animation ». Le fichier du script doit être dans le même dossier que l'image de l'animation ; il sera nommé data/gfx/forest/woodlog-thrower.scm dans ce cas ci.
[modifier] Code minimal
Le code ci-dessous permet de de construire l'image des frames, pour l'instant vide. Tout ce qui est après un point virgule est un commentaire et ne sera pas interprété par le programme.
La ligne 1 charge la bibliothèque de fonctions utilisées pour faciliter la construction des frames à partir de l'image source. Le chemin est relatif au dossier du script courant et indique le fichier data/common.scm. Dans la première commande let, les noms du fichier source (le .xcf) et du fichier de destination (le .png) sont donnés.
Dans le second let, ligne 5, le nom du fichier source est passé en paramètre à gimp-file-load pour ouvrir l'image ; puis l'image de destination est crée avec gimp-image-new en passant sa largeur et sa hauteur en paramètres.
La troisième commande let, de la ligne 8, a pour but d'ajouter un calque à l'image de destination, aux dimensions de l'image. Sans cette étape, Gimp réduira automatiquement la taille du canevas au minimum pour contenir les calques lors de la sauvegarde. La commande gimp-layer-new crée le calque. Les trois premiers paramètres sont l'image puis la largeur et la hauteur du calque. Le résultat est stocké dans la variable bk qui est ensuite passée à la commande gimp-image-add-layer pour effectivement ajouter le calque à l'image.
La fonction se termine ligne 15 par un appel à la fonction save-frames-and-exit, prenant en paramètre le nom du fichier de destination et l'image de destination, qui enregistre l'image puis clôt le logiciel Gimp.
(load "../../common.scm")
(let ( (src_name "woodlog-thrower.xcf.bz2")
(dest_name "woodlog-thrower.png") )
(let ( (src_image (car (gimp-file-load 1 src_name src_name)))
(dest_image (car (gimp-image-new 256 256 RGB)))
)(let ( (bk (car (gimp-layer-new dest_image 256 256 1 "background" 100 0)))
)(gimp-image-add-layer dest_image bk 0)
); on créera les frames ici(save-frames-and-exit dest_name dest_image)
) ; let
) ; let
Il ne reste maintenant qu'à remplacer la ligne 13 par la création des frames.
[modifier] Création des frames
La création d'une frame se fait par un appel à la fonction create-layer de la bibliothèque de fonctions. Elle prend en paramètres
- l'image source, ici src_image ;
- la liste des calques à afficher dans cette image source ;
- l'abscisse de la frame dans le fichier de destination ;
- l'ordonnée de la frame dans le fichier de destination ;
- la largeur de la frame dans le fichier de destination, ici toujours égale à 80 d'après le tutoriel « créer une animation » ;
- la hauteur de la frame dans le fichier de destination, ici toujours égale à 93 d'après le tutoriel « créer une animation » ;
- le fichier de destination, ici dest_image.
Remarquons que les position et la taille des frames sont les même que dans le fichier .spritepos.
La liste des calques peut n'être que leurs positions dans l'image (le plus haut est en position 0, celui en dessous en position 1 et ainsi de suite). Néanmoins, pour avoir une meilleure lisibilité et minimiser les modifications à apporter au script quand des calques sont ajoutés ou supprimés dans l'image source, il convient de les nommer dans le script. Cela est fait de la ligne 18 à 32.
Ensuite vient la création des frames proprement dite. À chacun des appels à create-layer des lignes 34, 38, 42 et 46 correspond une frame.
(let ( (wheel_2 0)
(wheel_1 1)
(wheel_0 2)
(cable_2 3)
(cable_1 4)
(cable_0 5)
(shadows 6)
(lights 7)
(x_3 8)
(x_2 9)
(x_1 10)
(x_0 11)
(d_noise 12)
(h_noise 13)
(rod 14) )
( create-layer src_image
(list wheel_0 cable_0 x_0
shadows lights d_noise h_noise rod )0 0 80 93 dest_image )
( create-layer src_image
(list wheel_1 cable_1 x_1
shadows lights d_noise h_noise rod )80 0 80 93 dest_image )
( create-layer src_image
(list wheel_2 cable_2 x_2
shadows lights d_noise h_noise rod )0 93 80 93 dest_image )
( create-layer src_image
(list wheel_1 cable_1 x_3
shadows lights d_noise h_noise rod )80 93 80 93 dest_image )
) ; let
[modifier] Exécution du script
Le script final est présenté un peu plus bas. Pour l'exécuter, il suffit d'ouvrir un terminal dans le même répertoire que le script et d'exécuter la commande gimp-console :
# ce qui est derrière un dièse est un commentaire et n'a pas à être écrit # aller dans le répertoire du script cd data/gfx/forest # exécuter le script. "-b -" signifie que le programme doit lire les commandes # sur l'entrée standard, "< woodlog-thrower.scm" écrit le contenu du script # sur cette même entrée. gimp-console -b - < woodlog-thrower.scm
Quelques messages s'affichent alors, puis le programme rend la main à l'utilisateur. Si ce n'est pas le cas, qu'il y a des messages d'erreur, il suffit de presser simultanément les touches Contrôle et C pour l'interrompre.
Si l'image source est modifiée, hors redimensionnement et changement de l'ordre des calques, il suffira de relancer la commande ci-dessus pour reconstruire le fichier des frames. Celui-ci sera ré-utilisé de manière transparente dans le fichier d'animation et dans le jeu.
Le script produit par ce tutoriel, avec sa licence, est reporté ci-dessous.
; ; Plee the Bear -- gfx script tools ; ; Copyright (C) 2005-2009 Julien Jorge, Sebastien Angibaud ; ; This program is free software; you can redistribute it and/or modify it ; under the terms of the GNU General Public License as published by the ; Free Software Foundation; either version 2 of the License, or (at your ; option) any later version. ; ; This program is distributed in the hope that it will be useful, but WITHOUT ; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ; more details. ; ; You should have received a copy of the GNU General Public License along ; with this program; if not, write to the Free Software Foundation, Inc., ; 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ; ; contact: plee-the-bear@gamned.org ; ; Please add the tag [PTB] in the subject of your mails. ; ; -- ; ; This script is intended to be run in this directory and via gimp-console: ; ; gimp-console -b - < this_script.scm ; (load "../../common.scm") (let ( (src_name "woodlog-thrower.xcf.bz2") (dest_name "woodlog-thrower.png") ) (let ( (src_image (car (gimp-file-load 1 src_name src_name))) (dest_image (car (gimp-image-new 256 256 RGB))) ) (let ( (bk (car (gimp-layer-new dest_image 256 256 1 "background" 100 0))) ) (gimp-image-add-layer dest_image bk 0) ) (let ( (wheel_2 0) (wheel_1 1) (wheel_0 2) (cable_2 3) (cable_1 4) (cable_0 5) (shadows 6) (lights 7) (x_3 8) (x_2 9) (x_1 10) (x_0 11) (d_noise 12) (h_noise 13) (rod 14) ) ( create-layer src_image (list wheel_0 cable_0 x_0 shadows lights d_noise h_noise rod ) 0 0 80 93 dest_image ) ( create-layer src_image (list wheel_1 cable_1 x_1 shadows lights d_noise h_noise rod ) 80 0 80 93 dest_image ) ( create-layer src_image (list wheel_2 cable_2 x_2 shadows lights d_noise h_noise rod ) 0 93 80 93 dest_image ) ( create-layer src_image (list wheel_1 cable_1 x_3 shadows lights d_noise h_noise rod ) 80 93 80 93 dest_image ) ) ; let (save-frames-and-exit dest_name dest_image) ) ; let ) ; let
| Liste des Tutoriels (m) | |
| Liens physiques · Création d'une animation · Script Scheme | |

