![]() |
Programmez un Tetris en Java 360 pages PDF pour apprendre à votre rythme. Développez des jeux vidéo en Java. www.jdevmaker.com |
Ce document est sous un contrat Creative Commons.
Après ce bourrage de crâne théorique, voyons concrètement ce que ça donne.
Pour rappel voici l'état actuel de notre script :
10 (define (script-fu-nouveau-calque-rapide image drawable) ;; declaration de la fonction
20 (set! width (car (gimp-image-width img)))
30 (set! height (car (gimp-image-height img)))
40 (set! new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 NORMAL)))
50 (gimp-image-add-layer img new-layer -1)
90 ) ;; fin de la fonction
100 (script-fu-register "script-fu-nouveau-calque-rapide" ;; nom du script
110 "<Image>/Perso/Quick Layer" ;; position du script dans le menu
120 "Cree un calque directement, sans dialogue" ;; commentaires
130 "Auteur" ;; auteur
140 "Copyright" ;; copyright
150 "Date" ;; date
160 "" ;; types d'images supportés par le script
170 SF-IMAGE "Image" 0 ;; image dans lequel le calque est ajouté
180 SF-DRAWABLE "Drawable" 0 ;; calque actif de l'image
190 ) ;; fin du register
Considérons la ligne 10.
(define (script-fu-nouveau-calque-rapide image drawable)
define nous permet de définir une fonction. Le nom de cette fonction est celui que nous avons déterminé à la ligne100, soit script-fu-nouveau-calque-rapide, et que nous avions considéré jusqu'a présent comme étant le nom du script. Il est plus juste de le reconnaître comme étant celui d'une fonction. Comme nous l'avons déjà vu toute les commandes doivent être spécifiée entre des parenthèses, les fonctions ne font pas exception. Ci-dessous le schéma illustrant cela.
La ligne 10 est le début et la ligne 90 la fin.
On peut noter qu'un certain nombre d'autres commandes et procédures sont à l'intérieur de notre fonction. Aussi lorsque notre fonction sera exécuter (quand on lancera le script via le menu dans Gimp par exemple), toute les commandes dans cette fonction seront aussi exécutées. Or ces instructions permettent de créer le nouveau calque.
Pour nota, il peut y avoir plusieurs fonctions dans un même script.
Toujours à la ligne 10, viennent ensuite image et drawable. Ce ne sont pas des instructions, mais des variables, que nous passons à la fonction script-fu-nouveau-calque-rapide. (cela revient à définir la fonction en lui disant tu garde sous le coude les variables image et drawable, tu en aura besoin).
Elle sont étroitement liés aux lignes 170 et 180, puisqu'elles sont les variables permettant de stocker les paramètres déclarés par script-fu-register. Le lien n'est pas apparent, il n'y a rien disant tel variable est lié a tel paramètres. Les variables seront affectées dans l'ordre de déclarations des paramètres. Ainsi la première variable image est affectée au premier paramètreSF-IMAGE "Image" 0, la seconde variable drawable est affectée au second paramètres SF-DRAWABLE "Drawable" 0. Et ce, autant de fois qu'il y a de paramètres, ce qui implique qu'il doit y avoir dans votre déclaration de fonction (ici la ligne 10) autant de variables que de paramètres déclarés dans script-fu-register. L'image ci-dessous illustre ce principe :
Attention, "Drawable" n'a rien à voir avec drawable, de même pour "Image" et image.
Comme nous l'avons vu, le nom d'une variable est arbitraire, vous pouvez tout à fait le changer. Modifiez la ligne 10, en changeant la variable image par img.
Enregistrez le fichier, puis faites Rafraîchir les scripts.
Le script ne se lance plus ? pardonnez moi cette petite farce (qu'est-ce qu'on s'marre !), mais cela nous donne l'occasion de voir la console d'erreurs. Vous avez sûrement obtenu le message suivant :
![]() |
Pour supprimer ce message, faites un clic droit sur le dialogue de la console et Effacer les erreurs.
Pourquoi cette erreur ? Bien que nous ne l'ayons pas encore vu, la variable image est utilisé plusieurs fois au cours du script. Nous l'avons modifié en ligne 10, où nous attribuons l'image active à la variable ayant pour nom img, mais aux lignes 30, 40, 50 et 60, elle est utilisé sous la dénomination image, qui désormais est inconnu, d'où un message d'erreur.
Modifiez les lignes 30, 40, 50 et 60, où vous remplacerez image par img. soit :
(set! width (car (gimp-image-width img)))
(set! height (car (gimp-image-height img)))
(set! new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 NORMAL)))
(gimp-image-add-layer img new-layer -1)
Enregistrez le fichier, puis faites Rafraîchir les scripts.
Le script se lance de nouveau correctement.
Nous reviendront plus tard sur le registre, afin de voir comment ajouter d'autres paramètres, qui puissent être changés via une boite de dialogue.