Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > Utilisation des clips > Contrôle de la lecture d'un clip | |||
Flash utilise la métaphore du scénario pour traduire une animation ou un changement d'état. Tout élément visuel qui a recours à un scénario est soit un objet MovieClip, soit une extension de la classe MovieClip. Bien qu'ilo soit possible en ActionScript de commander l'arrêt ou la lecture d'un clip et le passage à un autre point du scénario, il n'est pas possible de créer dynamiquement un scénario ni d'ajouter du contenu dans une image spécifique. Seul l'outil de création Flash le permet.
Pendant la lecture, le clip progresse le long du scénario à une vitesse fixée par la cadence d'image du fichier SWF. Vous pouvez également remplacer ce paramètre par la propriété Stage.frameRate en ActionScript.
Les méthodes play() et stop() permettent d'effectuer des manipulations simples sur un clip tout au long du scénario. Par exemple, supposons qu'un symbole de clip sur la scène contienne une animation représentant une bicyclette qui traverse l'écran, et don't le nom d'instance est bicycle. Si le code suivant est associé à une image-clé du scénario principal,
bicycle.stop();
la bicyclette ne se déplace pas (son animation n'est pas mise en lecture). Le mouvement de la bicyclette peut être déclenché par une action de l'utilisateur. Par exemple, avec un bouton nommé startButton, le code suivant (dans une image-clé du scénario principal) déclenche l'animation si l'utilisateur clique sur ce bouton :
// cette fonction est appelée en cas de clic sur le bouton Elle provoque
// l'exécution de l'animation de la bicyclette.
function playAnimation(event:MouseEvent):void
{
bicycle.play();
}
// Enregistremen de la fonctions comme écouteur auprès du bouton
startButton.addEventListener(MouseEvent.CLICK, playAnimation);
Les méthodes play() et stop() ne sont pas les seules méthodes commandant l'animation d'un clip. Vous pouvez également avancer et reculer manuellement la tête de lecture à l'aide des méthodes nextFrame() et prevFrame(). L'appel de l'une de ces deux méthodes arrête la lecture et fait avancer le clip ou le rembobine d'une image.
L'utilisation de la méthode play() revient à appeler nextFrame() chaque fois qu'un événement enterFrame est déclenché pour cet objet clip. Vous pouvez donc envisager d'animer le clip bicycle en arrière en ajoutant un écouteur pour l'événement enterFrame et en indiquant à bicycle, dans la fonction écouteur, de reculer d'une image, comme suit :
// cette fonction est appelée lors du déclenchement de l'événement enterFrame, elle est donc
// appelée une fois par image.
function everyFrame(event:Event):void
{
if (bicycle.currentFrame == 1)
{
bicycle.gotoAndStop(bicycle.totalFrames);
}
else
{
bicycle.prevFrame();
}
}
bicycle.addEventListener(Event.ENTER_FRAME, everyFrame);
En lecture normale, si un clip contient plusieurs images, il tourne en boucle lors de la lecture, c'est-à-dire qu'il revient à l'image 1 une fois qu'il a passé la dernière image. Si vous utilisez prevFrame() ou nextFrame(), ce comportement ne se produit pas automatiquement (l'appel de prevFrame() lorsque la tête de lecture est sur l'image 1 ne déplace pas la tête de lecture à la dernière image). La condition if dans l'exemple ci-dessus vérifie si le clip est revenu à la première image et fait alors passer le clip à la dernière image, créant ainsi une boucle continue de lecture en arrière.
Le déplacement d'un clip à une nouvelle image est une opération simple. Il suffit d'appeler gotoAndPlay() ou gotoAndStop() en spécifiant le numéro de l'image cible comme paramètre. Vous pouvez également transmettre une chaîne correspondant au nom de l'étiquette d'image. Il est possible d'attribuer une étiquette à toute image du scénario. Pour ce faire, sélectionnez une image du scénario, puis tapez un nom dans le champ Etiquette d'image de l'inspecteur de propriétés.
L'utilisation des étiquettes d'image plutôt que des numéros présente des avantages évidents pour créer un clip complexe. Si le nombre d'images, de calques et d'interpolation d'une animation est élevé, envisagez d'étiqueter les images importantes de manière évocatrice, en faisant référence aux changements de comportement dans le clip (par exemple « départ », « marche » ou « course »). Cette technique permet d'améliorer la lisibilité du code et offre plus de souplesse, puisque les appels ActionScript destinés à une image étiquetée pointent sur une référence uniquement (l'étiquette) plutôt que sur une image numérotée. Si vous décidez par la suite de déplacer un segment de l'animation vers une autre image, il ne sera pas nécessaire de modifier le code ActionScript si vous conservez les mêmes étiquettes pour toutes les images au nouvel emplacement.
Pour représenter des étiquettes en code, ActionScript 3.0 comporte la classe FrameLabel. Chaque instance de cette classe représente une étiquette d'image unique, et possède une propriété name qui représente le nom de l'étiquette tel qu'il a été indiqué dans l'inspecteur de propriétés, ainsi qu'une propriété frame qui représente le numéro de l'image pour laquelle l'étiquette est placée dans le scénario.
Pour permettre d'accéder aux instances de FrameLabel associées à une instance de clip, la classe MovieClip comporte deux propriétés qui renvoient directement des objets FrameLabel. La propriété currentLabels renvoie un tableau composé de tous les objets FrameLabel présents sur l'ensemble du scénario d'un clip. La propriété currentLabel renvoie un objet FrameLabel unique, celui rencontré le plus récemment dans le scénario.
Supposons que vous avez créé un clip nommé Robot et que vous avez étiqueté les différents états de l'animation. Vous pouvez définir une condition pour vérifier la propriété currentLabel afin d'accéder à l'état actuel de Robot, comme dans le code suivant :
if (robot.currentLabel.name == "walking"
{
// action
}
Flash CS3
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000212.html