Utiliser l'Xobjet Fill (D6)
Une animation permettant à l'utilisateur de colorier un
dessin n'a pas besoin de mettre en uvre de nombreuses commandes
Lingo. Le scénario en revanche doit contenir autant d'acteurs
1 bit que de surfaces différentes à colorier. L'obligation
de superposer ces "morceaux" ou sprites en utilisant l'encre copier
vient ensuite compliquer la tâche du développeur qui
doit intercepter avec précision les clics sur chaque sprite
pour utiliser à bon escient la commande "set the foreColor
of sprite..." L'Xobjet Fill permet de s'affranchir de ces difficultés
en rendant possible de colorier directement sur l'écran une
zone délimitée. Disponible sur Mac et PC, Fill Xobjet
est freeWare. Suivez le Crapo...
Pour nos essai, on commence par disposer sur la scène un
acteur noir et blanc qui sera notre dessin à colorier. Nous
devons également veiller à ce que notre moniteur soit
réglé en 256 couleurs ( on saisit : set the colorDepth
to 8).
On ouvre alors le fichier de l'Xchose par la commande openXlib
saisie dans la fenêtre message de Director. Si le fichier
ne se trouve pas au même niveau que l'animation, il convient
d'en indiquer le chemin.
openXlib "Macintosh HD:desktop folder:Fill xobj"
Director n'indique pas si l'ouverture de l'Xobjet a réussie.
pour le savoir et connaître le nom véritable de l'Xobjet,
Il nous faut interroger Director un nouvelle fois :
showxlib
-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020
-- "fill xobj" -- XObject: Fill Id:9970
Le contenu de cette liste peut varier mais sa structure est toujours
la même : D'abord les Xtras (sous le titre XLibrairies) puis
viennent les Xobjets et autres (sous le titre Standard.xlib). Pour
info, XCMDGlue est un xobjet intégré à Director
qui permet d'utiliser les fragments de code ( XCMDs, XFCNs) destinés
initialement à Hypercard, (sur PC, on rencontrera DLLGlue
qui joue ce même rôle d'intermédiaire à
l'usage des librairies liées dynamiques DLL). On a ici avec
SerialPort deux ressources XCODs intégrées à Director
et non pas des XObjets externes.
Pour apparaître dans cette liste, les xtras Lingo doivent
être placés dans le dossier Xtras au lancement de l'application
ou bien encore être ouvertes ponctuellement par la commande
openXlib.
Les Xobjets doivent être appelés par openXlib.
Les XCMDs et XFCNs doivent être ouvertes par openXlib. L'xobjet
intégré XCMDGlue se chargeant de gérer dans
Director l'utilisation des ces commandes externes destinées
initialement à enrichir l'application Hypercard.
Notre objet est disponible. Pour connaître les méthodes
utilisables nous lui passons "mDescribe" :
put fill(mdescribe)
-- Factory: Fill ID:9970
-- Fill XObject 1.2.1 -- June 6th, 1994
-- Updated January 26th, 1995 --
-- Performs paint fills onto the stage. --
-- Optimized to run under System 7 (or greater) and in 8-bit color
only. --
-- Written by Scott Kildall -- -- © 1994 by Red Eye Software
-- All rights reserved --
-- AOL: Kildall -- AppleLink: S.KILDALL -- Compuserve: 72703,451
-- Internet: 72703.451@compuserve.com
-- Licensed for The MediaBook CD for Director 2
-- Published by gray matter design
--IIIII mNew, left, top, right, bottom
-- creates an instance of the XObject in memory and will use the
specified rectangle for the area affected by the fill
X mDispose -- releases the instance
IIII mRGBtoIndex, red color, green color, blue color -- given the
red, green and blue channel color, this returns the indexed palette
color that most closely matches the RGB color
II mIndextoRed, indexed color -- given the indexed color, this returns
the corresponding red channel color
II mIndextoGreen, indexed color -- given the indexed color, this
returns the corresponding green channel color
II mIndextoBlue, indexed color -- given the indexed color, this
returns the corresponding blue channel color
XIII mSetFillColor, red color, green color, blue color -- specifies
an RGB fill color to be used
XI mSetIndexedFillColor, indexed color -- specifies an indexed fill
color to be used
XIII mSetProtectedColor -- specifies an RGB color to be excluded
from being filled
XI mSetIndexedProtectedColor -- specifies an indexed to be excluded
from being filled
III mGetIndexedColor, horizontal location, vertical location --
returns the indexed palette color at the specified point
III mGetRedColor, horizontal location, vertical location -- returns
the red channel color at the specified point
III mGetGreenColor, horizontal location, vertical location -- returns
the green channel color at the specified point
III mGetBlueColor, horizontal location, vertical location -- returns
the blue channel color at the specified point
XII mFill, horizontal location, vertical location -- performs a
standard paint bucket fill to the offscreen map at the specified
point
I mSave-- Saves the stage into an offscreen map.
I mRestore -- Restores the offscreen map onto the stage --
-- Indexed palette colors are in the range of 0-255 --
-- RGB Colors are divided into 3 channels: red, green and blue with
each channel have a value in the range 0-255 --
-- Only one color may be protected at a time.
Les premières lignes portent mention de l'auteur. Les lignes
suivantes présentent une à une et de façon
conventionnelle, les méthodes utilisables. Chacune de ces
lignes est rédigée de la même manière
:
Le groupe de lettres initiales (capitales souvent) fournit de indications
sur le type que la fonction retourne (premier caractère)
et le type d'arguments qu'elle requiert (tous les autres).
X indique que la fonction ne retourne aucune valeur
I désigne un entier
S une chaîne de caractères entre guillemets
plus rarement on rencontre dans ces listes :
L pour une liste d'entiers
P pour une image
O pour une instance d'Xobjet
V pour un nombre d'argument variable ou un type original
Nous devons commencer par créer une instance de l'objet
en utilisant la méthode globale mNew. C'est lors de l'instanciation
qu'il nous faut indiquer les coordonnées rectangulaires de
la portion de la scène à colorier. Par commodité
nous reprenons le rectangle du sprite lui même. Nous allons
stocker l'instance dans la variable CRAPO.
set crapo to fill(mnew, 55, 52, 141, 202)
Notre objet CRAPO connaît désormais son champs d'action.
Il est possible dès lors, n'importe où à l'intérieur
du rectangle défini, de simuler l'application d'un outil
pot de peinture. Cet outil (présent dans Photoshop comme
dans le module de dessin de Director) permet de colorier toute une
surface de pixels contigus. Avant de simuler l'application du pot
de peinture en un point spécifique du rectangle, nous devons
interdire à la "peinture" de couvrir les pixels noirs. La
méthode mSetIndexedProtectedColor autorise à définir
une couleur de la palette système comme limite à l'application
du pot. Si nous ne procédons pas ainsi, c'est le blanc que
l'objet contournera par défaut.
crapo(mSetIndexedProtectedColor, 255)
Nous pouvons maintenant choisir une couleur de remplissage. La
palette de Director (accessible par le menu Fenêtre) nous
aide dans notre choix puisqu'elle donne les équivalence numérique
de chaque couleur indexée.
crapo(mSetIndexedFillColor, 35)
Simulons maintenant un clic sur un pixel précis à
l'aide d'un pot de peinture . On sait que nous devons nous limiter
à la zone de travail initiale. Pour identifier un point,
nous avons placé la souris au dessus du personnage, et avons
demandé dans la fenêtre message les coordonnées
the mouseH, the mouseV (put the mouseH). On passe à l'objet
CRAPO la méthode mFill avec ces deux coordonnées :
crapo(mfill, 82,172)
On recommence en un autre point, avec une autre couleur :
crapo(mSetIndexedFillColor, 9)
crapo(mfill, 118,127)
Parce que ces changements de couleurs ne concernent en rien les
sprites de Director, on les annule facilement :
updatestage
Si nous voulons conserver les changements effectués pour
afficher ultérieurement le coloriage par exemple, nous devons
passer à CRAPO la méthode mSave.
crapo(mSetIndexedFillColor, 9)
crapo(mfill, 118,127)
crapo(msave)
Dès lors, CRAPO mémorise le coloriage et saura le
restituer après effacement (méthode mRestore).
updatestage
crapo(mRestore)
Après utilisation, on n'oubliera pas de libérer la
mémoire de notre objet en lui passant la méthode mDispose :
crapo(mdispose)
Puis on fermera le fichier Xlib.
CloseXlib "Macintosh HD:desktop folder:Fill xobj"
L'Xobjet Fill (Mac ou PC) est téléchargeable sur
le site RedEye Software : http://www.duodenum.com/redeye/
Pour D7 et suivant on se choisira pour une fonction équivalente
l'Xtra DrawXtra (payante) de l'éditeur Tabuleiro
<
Sommaire
|