SlideShare a Scribd company logo
1 of 546
Download to read offline
50
scripts
pour

Flash CS3
David Tardiveau
50
scripts
pour

Flash CS3
Chez le mĂȘme Ă©diteur
D. Tardiveau. – La vidĂ©o dans Flash.
N°12048, 2007, 190 pages.
A. Tasso. – Apprendre Ă  programmer en ActionScript 3 – Avec 60 exercices corrigĂ©s.
N°12199, 500 pages. À paraütre.
W. Siracusa. – Faites vos jeux avec Flash ! – Du Pacman au Sudoku.
N°11993, 2006, 220 pages.
M. Lavant. – Flash 8 Professional.
N°11950, 2006, 678 pages.
C. BergĂ©. – Je crĂ©e mon site Internet avec Dreamweaver 8 et Flash 8.
N°11977, 2006, 144 pages + CD-Rom vidéo.
J.-M. Defrance. – PHP/MySQL avec Flash 8.
N°11971, 2006, 782 pages.
J.-M. Defrance. – PHP/MySQL avec Flash MX 2004.
N°11468, 2005, 710 pages.
M. Capraro et al. – Flash MX 2004 Magic.
N°11513, 2004, 164 pages.
G. Guine, A. Moraes. – Flash MX – Jeu en rĂ©seau avec Action Script et XML.
N°11068, 2002, 170 pages.
K. Goto, E. Cotler. – Redesign web 2.0.
N°11579, 2005, 294 pages.
R. Goetter, S. Blondeel. – CSS2 – Pratique du design web.
N°11570, 2005, 324 pages.
J. Zeldman. – Design web : utiliser les standards – CSS et XHTML.
N°11548, 2005, 414 pages.
G. Gueneau. – Conduite de projets en crĂ©ation numĂ©rique.
N°11474, 2005, 300 pages.
50
scripts

pour

Flash CS3
David Tardiveau
ÉDITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

Le code de la propriété intellectuelle du 1er juillet 1992 interdit en effet expressément la photocopie à
usage collectif sans autorisation des ayants droit. Or, cette pratique s’est gĂ©nĂ©ralisĂ©e notamment dans
les Ă©tablissements d’enseignement, provoquant une baisse brutale des achats de livres, au point que
la possibilitĂ© mĂȘme pour les auteurs de crĂ©er des Ɠuvres nouvelles et de les faire Ă©diter correctement
est aujourd’hui menacĂ©e.
En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le
prĂ©sent ouvrage, sur quelque support que ce soit, sans autorisation de l’éditeur ou du Centre Français d’Exploitation
du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris.
© Groupe Eyrolles, 2007, ISBN : 978-2-212-12112-4
o t 2007 7:29 07

Remerciements

Merci à Fanny pour ces moments passés sur MSN à tester certaines animations et pour la
relecture de quelques passages du livre.
Merci Ă  Melux pour ses relectures.
EnïŹn, merci Ă  Marine et Marjorie qui ont vu mon dos et mon tĂȘte-Ă -tĂȘte avec l’écran de
l’ordinateur pendant quatre mois
 Promis, j’attends deux mois avant d’écrire le prochain
livre !
0. ao t 2007 7:29 07
ao t 2007 7:29 07

Avant-propos

Pourquoi un tel ouvrage ?
Lorsque vous rencontrez un problĂšme en ActionScript, vous disposez de diffĂ©rentes sources d’information pour vous aider : en particulier, les forums vous permettent d’interroger la communautĂ© des ïŹ‚asheurs. Prenez-vous le temps d’y rechercher si un post ne
correspond pas Ă  la question que vous vous apprĂȘtez Ă  dĂ©poser ? En parcourant les sujets
des principaux forums, on peut en effet constater que les questions sont nombreuses et
précises.
Vous pouvez Ă©galement dĂ©cider d’approfondir vos connaissances en ActionScript, gĂ©nĂ©ralement de maniĂšre acadĂ©mique ou par autoformation. Dans les deux cas, l’analyse
d’exercices et de cas existants constitue alors un axe majeur de l’acquisition des bases.
EnïŹn, si vous n’avez ni le courage ni le temps de rechercher la solution d’un problĂšme
dans un forum ou d’apprendre par vous-mĂȘme, il vous reste toujours la possibilitĂ©
d’interroger des spĂ©cialistes.
Mais en production d’animations Flash, si les problĂšmes et besoins de dĂ©veloppement
sont rĂ©currents, il n’existe pas cependant une seule solution de dĂ©ploiement pour dĂ©velopper une partie d’un programme.
C’est en partant de ces diffĂ©rents constats qu’est nĂ©e l’idĂ©e d’écrire un ouvrage rĂ©fĂ©rençant
les techniques les plus fréquemment rencontrées en production.
En tant qu’enseignant, je constate que les difïŹcultĂ©s d’apprentissage reposent toujours sur
les mĂȘmes problĂšmes : explications trop prĂ©cises lors d’une premiĂšre approche (souvent dans un souci d’exhaustivitĂ©), trop techniques et de ce fait trop abstraites. C’est
pourquoi l’approche pĂ©dagogique utilisĂ©e dans ce livre s’appuie sur des techniques
d’enseignement qui ont fait leurs preuves. Certains scripts seront parfois moins optimisĂ©s qu’ils pourraient ou devraient l’ĂȘtre, mais ce sera dans un souci d’accessibilitĂ© Ă  un
large public.
Nous ne sommes pas lĂ  pour critiquer les ressources mises Ă  disposition des ïŹ‚asheurs sur
Internet, mais il faut reconnaĂźtre que la majeure partie des sites proposant des tutoriaux
sont rarement pertinents. Bien souvent, les webmasters (et/ou rédacteurs, auteurs
ao t 2007 7:29 07

150 scripts pour Flash CS3

d’articles) ne se mettent ni Ă  la place ni au niveau des apprenants. Certes, toutes ces ressources ne s’adressent pas uniquement aux dĂ©butants, mais un certain nombre d’entre
elles manquent leur cible en raison de leur degrĂ© d’abstraction. D’autant qu’un apprentissage s’effectuant par paliers, on peut ĂȘtre novice Ă  plusieurs niveaux. Un expert ne devrait
jamais oublier que ce qui lui paraĂźt Ă©vident ne l’est pas pour tout le monde. Nous garderons donc Ă  l’esprit ces directives tout au long de nos analyses.

Compatibilité des scripts de ce livre
Chaque animation est introduite par un texte justiïŹant l’intĂ©rĂȘt de sa prĂ©sence dans ce
livre, tandis que le ïŹchier .ïŹ‚a correspondant sera disponible en ligne.
Pour exploiter un script de l’ouvrage, il vous sufïŹra d’ouvrir le ïŹchier d’extension .ïŹ‚a,
sans aucune manipulation supplémentaire. En revanche, si vous souhaitez utiliser un
script du livre dans un nouveau document Flash CS3, il faudra que ce document soit de
type ActionScript 2 pour que le script soit compatible.
Remarque
Pour développer en ActionScript 1 ou 2 à partir de Flash CS3, vous devez sélectionner Fichier
Flash (ActionScript 2.0) lors de la crĂ©ation d’un nouveau document.

Les différents niveaux de développement
en ActionScript
Quelle est la crĂ©dibilitĂ© de l’auteur face aux propos qui vont suivre ?
En tant qu’enseignant qui dispense des cours en ActionScript 2 et ActionScript 3, et auteur
d’ouvrages traitant des deux versions du langage, j’ai conscience des diffĂ©rences de niveaux
qui existent entre les individus en matiùre de programmation. Il est donc inutile d’essayer
d’enseigner l’ActionScript 3 Ă  ceux qui auront plus de facilitĂ©s Ă  apprendre l’ActionScript 1 ou 2.

L’ouvrage que vous avez entre les mains est sorti aprùs la version CS3 de Flash. Vous
pourriez en toute légitimité vous demander si les scripts de ce livre sont compatibles
avec cette nouvelle version et quel est le public visĂ©. Rassurez-vous, si l’auteur et les
Ă©ditions Eyrolles ont dĂ©cidĂ© d’éditer une nouvelle version de cet ouvrage, c’est parce
que Flash CS3 utilise l’ActionScript 1 et 2, et l’ActionScript 3. Dans ce cas, oĂč sont les
différences ?

VIII
07 7:29 07

Avant-propos

ActionScript 1 et 2
Aujourd’hui, face Ă  l’ActionScript 3, peut-on afïŹrmer que l’ActionScript 1 et l’ActionScript 2 sont des langages obsolĂštes qu’Adobe conserve dans un souci de compatibilitĂ© ou
sont-ils encore fonctionnels et utiles ? Il est intéressant de répondre à cette question par
une sĂ©rie d’autres interrogations :
‱ Est-il nĂ©cessaire de faire appel Ă  un architecte et/ou un menuisier pour fabriquer soimĂȘme une Ă©tagĂšre ?
‱ Est-il nĂ©cessaire de faire appel Ă  un maquettiste et un imprimeur pour rĂ©aliser un fairepart de naissance, etc. ?
‱ Est-il nĂ©cessaire de faire appel Ă  un Ă©lectricien pour installer un rĂ©seau Ă©lectrique dans
une piĂšce ?
En fonction de vos compĂ©tences, peut-ĂȘtre pourriez-vous fabriquer vous-mĂȘme cette
Ă©tagĂšre et concevoir un faire-part de naissance, mais la mise en place de l’installation
Ă©lectrique pourrait ĂȘtre plus difïŹcile. Qu’en est-il de vos compĂ©tences en matiĂšre de programmation ? Êtes-vous un professionnel dans ce domaine ou ressentez-vous un besoin
plus ou moins ponctuel en matiÚre de développement en ActionScript ?
Nous souhaitons ainsi vous montrer que vous ne devez pas avoir de complexes à développer
en ActionScript 1 ou 2 plutĂŽt qu’en ActionScript 3, ce dernier nĂ©cessitant de rĂ©elles compĂ©tences en programmation, ainsi qu’une aptitude Ă  apprĂ©hender des notions difïŹciles et
souvent abstraites, liées à la programmation orientée objet.
En tant qu’enseignant depuis prùs de quinze ans, j’ai pu constater à quel point chacun
d’entre nous est plus ou moins rĂ©ceptif aux informations qui peuvent lui ĂȘtre dĂ©livrĂ©es.
Nous possédons tous des blocages conscients ou inconscients, des facilités, des acquis et
des lacunes, liĂ©s Ă  notre histoire respective, et c’est pourquoi chacun apprend plus ou moins
vite... D’ailleurs, si l’accĂšs au dĂ©veloppement informatique Ă©tait si facile et si Ă©vident, la
sociĂ©tĂ© Adobe n’aurait pas dĂ©cidĂ© de conserver trois versions du langage ActionScript.
Avant d’aller plus loin, tentons d’expliquer ce qui diffùre entre ActionScript 1 et ActionScript 2. Rappelons pour commencer que la version 2 de l’ActionScript est sortie en 2003
avec l’arrivĂ©e de Flash MX 2004. La syntaxe pointĂ©e, apparue en 2002 avec Flash MX,
existait alors dĂ©jĂ . Contrairement Ă  ce que beaucoup soutiennent, l’ActionScript 2 ne se
caractĂ©rise pas par la syntaxe pointĂ©e. Il est donc inexact d’afïŹrmer que les gestionnaires
de type on(press) relùvent de l’ActionScript 1 et ceux de type instance.onPress de
l’ActionScript 2. Ce qui caractĂ©rise rĂ©ellement l’ActionScript 2, c’est le fait de pouvoir
Ă©crire ses propres classes dans des ïŹchiers externes (dont l’extension est .as). Pour ces
deux premiùres versions du langage, le vocabulaire est ainsi commun à 99 %, et c’est
dans la façon de dĂ©velopper et d’écrire les scripts qu’il faut distinguer ActionScript 1 et
ActionScript 2. Pour ĂȘtre plus prĂ©cis, on parle de programmation orientĂ©e objet en
ActionScript 2, alors qu’en ActionScript 1, on parle de programmation structurĂ©e
ou sĂ©quentielle. Cet ouvrage est compatible avec ActionScript 1 et ActionScript 2 puisque les lignes d’instructions sont valables pour les deux versions du langage. Alors que
IX
t 2007 7:29 07

150 scripts pour Flash CS3

l’ActionScript 3 est sorti, si vous avez achetĂ© ce livre, c’est que vous n’aurez sĂ»rement pas
besoin de vous lancer dans la programmation orientée objet.
Remarque
Adobe ne mentionne que Fichier Flash (ActionScript 2.0) lorsque vous souhaitez crĂ©er un nouveau document car c’est le mĂȘme type de document pour l’ActionScript 1 et l’ActionScript 2.
Seule l’approche dans la programmation diffĂšre comme nous l’avons expliquĂ© plus haut.

ActionScript 3
Comme nous l’évoquions dans le paragraphe prĂ©cĂ©dent, c’est votre besoin en matiĂšre de
dĂ©veloppement qui a motivĂ© votre choix et vous a poussĂ© Ă  acheter ce livre. MĂȘme si en
ActionScript 3 il est encore possible de programmer de maniÚre structurée, la syntaxe
n’en est pas pour autant accessible. Par ailleurs, sachez que le vocabulaire diffùre complùtement entre l’ActionScript 1, 2 et 3. Pour avoir un aperçu de ce dernier et vous rendre
compte des différences au travers de nombreux exemples, rendez-vous sur le site
www.yazo.net.

Bouton ou clip ?
Nous utiliserons parfois le terme Bouton pour dĂ©signer une occurrence sur laquelle l’utilisateur peut cliquer. Il s’agira dans 99,9 % des cas d’occurrences de clips. Il est trĂšs
important que vous compreniez dĂšs Ă  prĂ©sent que l’utilisation des symboles de type
Bouton est gĂ©nĂ©ralement dĂ©conseillĂ©e. Il est en effet impossible de dĂ©ïŹnir une variable
dans l’occurrence d’un bouton ou d’utiliser les mĂ©thodes de la classe MovieClip(). Ayez
donc le rĂ©ïŹ‚exe de crĂ©er des symboles de type Clip et non de type Bouton pour crĂ©er dynamiquement vos interfaces.

Doit-on utiliser les composants ?
Si vous démarrez en ActionScript, la réponse à cette question est embarrassante ! Pourquoi programmer ce qui existe déjà, me direz-vous ? Les composants vous évitent en effet
de redĂ©velopper ce qui l’a dĂ©jĂ  Ă©tĂ© par d’autres que vous : menus, textes dĂ©ïŹlants, Ă©lĂ©ments de contrĂŽle de mĂ©dias, calendriers, barres de chargement, etc. Mais lorsque vous
apprenez une langue, est-il prĂ©fĂ©rable de retenir des listes d’expressions ou d’apprendre sa
grammaire et son vocabulaire ?
En fait, il est fortement conseillĂ© d’apprendre d’abord l’ActionScript sans faire appel aux
composants, mĂȘme si vous devez redĂ©velopper ce qui l’a dĂ©jĂ  Ă©tĂ©, car votre objectif principal est de maĂźtriser ce langage. Utiliser des morceaux de code que vous ne comprendrez
que dans leur contexte ne vous fera pas progresser. Il vous faudra donc connaĂźtre les
X
150 scripts Livre Page XI Lundi, 20. ao t 2007 7:29 07

Avant-propos

notions Ă©lĂ©mentaires, telles que les techniques de l’algorithme, les gestionnaires, les
méthodes de la classe MovieClip() et les classes intégrées.
En revanche, dĂšs lors que vous aurez compris les grands mĂ©canismes de l’ActionScript et
ceux des composants, ne réinventez pas la roue !

Structure de l’ouvrage
Le livre s’articule autour de cinq grandes parties.
La premiÚre partie vous présentera des animations dédiées aux techniques relatives au
contrÎle des éléments composant une interface. Vous découvrirez ainsi différents
types de menus et boutons, des scripts de contrĂŽle du dĂ©placement d’occurrences sur
la scùne, des techniques de construction dynamique de l’interface, et bien d’autres
encore.
La deuxiÚme partie est consacrée à la découverte des techniques de contrÎle des médias.
Il est conseillé de se référer dans un premier temps aux explications données en annexe de
ce livre si vous ne connaissez pas la technologie Flash Media Server (anciennement Flash
Communication Server).
La troisiĂšme partie est trĂšs importante car elle vous permettra de comprendre les contraintes
de traitement et de mise en page du texte dans une animation.
La quatriÚme partie vous démontrera que la réalisation de jeux en Flash ne présente pas
forcĂ©ment de difïŹcultĂ©s particuliĂšres. Nous avons principalement retenu des jeux pour
enfants qui sont utilisés dans de nombreux sites, ainsi que des jeux plus classiques de tir,
de grattage et de machine à sous. En simulant un jeu de dames en réseau, vous découvrirez
également comment créer un jeu multijoueur.
EnïŹn, la cinquiĂšme partie est dĂ©diĂ©e aux techniques de contrĂŽle de la scĂšne d’une
animation.
En annexe, vous trouverez des explications et des scripts (entiers ou partiels) récurrents
qui vous sont proposĂ©s tout au long de l’ouvrage. Nous avons en effet prĂ©fĂ©rĂ© regrouper
les explications communes à plusieurs animations que d’expliquer plusieurs fois le
mĂȘme point dans diffĂ©rentes analyses et augmenter ainsi inutilement le volume de ce
livre.

Structure d’une Ă©tude de cas
Comme vous pourrez le constater, la prĂ©sentation d’une animation Ă  l’autre est toujours
identique : elle s’appuie sur une structure prĂ©cise qui facilite la comprĂ©hension de l’analyse des scripts.

XI
150 scripts Livre Page XII Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

‱

Titre de l’animation
Un petit texte de prĂ©sentation explique l’intĂ©rĂȘt de l’animation et son fonctionnement
dans certains cas.

Figure 1
LĂ©gende des ïŹgures

Rappel
Pour certaines animations, nous rappelons une ou plusieurs bases, et nous vous mettons en
garde sur les piĂšges Ă  Ă©viter.

Description du ïŹchier
Indication de la
version de Flash
Player compatible avec l’animation

Chemin d’accĂšs : NomDunDossierPrincipal/NomDunSousDossier/NomDeLanimation.ïŹ‚a
Nous vous dĂ©crivons ici la construction de l’interface de l’animation, c’est-Ă -dire les
occurrences et textes dynamiques présents sur la scÚne, et indiquons leurs noms.
Dans certaines animations, nous énumérons des procédures, sous formes de listes numérotées. Par exemple :
1. Procédure 1.
2. Procédure 2.
3. Procédure 3.

Script
Le script vous est ensuite prĂ©senté 
var menus = ["Destinations", "Tarifs", "Promotions", "Horaires"];
var destinations = ["Asie", "Amérique du sud", "Amérique central", "Etats-Unis", "Europe"];


s’en suit l’analyse
XII
150 scripts Livre Page XIII Lundi, 20. ao t 2007 7:29 07

Avant-propos

Analyse
Ligne 1 : dans certains cas, nous analysons ou expliquons le script ligne par ligne.
Rappel
Quelques petits commentaires ou rappels peuvent venir apporter une aide complémentaire.

Lignes 7 Ă  9 : certaines lignes d’instructions sont analysĂ©es et/ou commentĂ©es globalement.

Bogues Ă©ventuels
Pour certaines animations, nous vous mettons en garde sur des risques d’erreurs et/ou
nous insistons sur l’importance de certaines lignes.

Téléchargement des animations utilisées
dans cet ouvrage
Vous pouvez tĂ©lĂ©charger toutes les animations que nous dĂ©crivons dans ce livre Ă  l’adresse
suivante : www.editions-eyrolles.com.

XIII
150 scripts Livre Page XIV Lundi, 20. ao t 2007 7:29 07
150 scripts Livre Page XV Lundi, 20. ao t 2007 7:29 07

Table des matiĂšres

INTRODUCTION

Se prĂ©parer Ă  la lecture de l’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . .

1

Utilisation du XML dans Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

Créer un document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Charger un document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lire un nƓud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lire un attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Informations complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
6
8
11

Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DeuxiĂšme exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
16

InterprĂ©tation du nom d’une occurrence . . . . . . . . . . . . . . . . . . . . . . . . . .

19

Gestion des lignes d’instructions contenues dans une boucle for() . . .

21

Le sens du mot-clé this selon les contextes . . . . . . . . . . . . . . . . . . . . . . . . . .

24

L’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

PARTIE I

CHAPITRE 1

Optimisation d’une animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

Techniques d’optimisation d’une production en Flash . . . . . . . . . . . . . .

27

Prise en main du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27
150 scripts Livre Page XVI Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Avant de démarrer un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optimisation via l’ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
En cours de projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PiÚges et autres bogues récurrents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29
30
32
32

Réaliser un préchargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

CHAPITRE 2

Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

Barre de menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

Menu déroulant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40

Menu animé avec la classe Tween() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

Menu déroulant avec le composant MenuBar . . . . . . . . . . . . . . . . . . . . . . .

48

Menu en accordéon animé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

Menu en accordéon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

Menu contextuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

Ronde de boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

Le composant Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

Navigation par onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

Navigation dynamique par onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

Construction dynamique du menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

CHAPITRE 3

Les boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75

Créer un bouton bascule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75

DĂ©sactiver un bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77

RĂ©aliser un double-clic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

CrĂ©er un bouton avec un effet d’enfoncement . . . . . . . . . . . . . . . . . . . . . .

82

CHAPITRE 4

Les variateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Variateur linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85

Variateur circulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XVI

85

89
150 scripts Livre Page XVII Lundi, 20. ao t 2007 7:29 07

Table des matiĂšres

Variateur de couleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91

Variateur de couleur avec la classe geom.ColorTransform . . . . . . . . . . . .

95

CHAPITRE 5

Les paniers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97

Panier sous forme de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97

Drag & drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

102

Drag & drop avec gestion de l’inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . .

104

CHAPITRE 6

Les éléments de formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

109

RĂ©alisation d’un formulaire avec les composants Flash . . . . . . . . . . . . . .

109

RĂ©alisation d’un QCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

114

RĂ©alisation d’un QCM avec un ïŹchier XML . . . . . . . . . . . . . . . . . . . . . . . .

117

CHAPITRE 7

Scroll et panoramiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

121

Scroll Ă  vitesse constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

121

DĂ©placement d’un point Ă  un autre dans un plan panoramique . . . . . . .

123

DĂ©ïŹlement de plusieurs plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

126

CHAPITRE 8

Les transitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

129

Transition entre deux images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

129

Transition au chargement d’une animation . . . . . . . . . . . . . . . . . . . . . . . .

132

Transition en utilisant la classe TransitionManager() . . . . . . . . . . . . . . . .

134

CHAPITRE 9

Constructions dynamiques d’interfaces . . . . . . . . . . . . . . . . . . . . . . .

137

Placement dynamique de symboles sur la scĂšne . . . . . . . . . . . . . . . . . . . .

137

Travailler avec le nom des occurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . .

141

Utilisation de ïŹchiers XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

144
XVII
150 scripts Livre Page XVIII Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Créer un symbole modÚle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

149

TracĂ© d’une carte gĂ©ographique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Imbriquer des animations les unes dans les autres. . . . . . . . . . . . . . . . . . .
Travailler avec les coordonnées de la souris . . . . . . . . . . . . . . . . . . . . . . . .
CrĂ©ation d’une palette de couleur avec getPixel() . . . . . . . . . . . . . . . . . . .
Utilisation d’une palette de couleur utilisant getPixel() . . . . . . . . . . . . . .

152
155
157
158
161

CHAPITRE 10

ContrĂŽle et afïŹchage du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

163

RĂ©aliser une horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

163

RĂ©aliser un compte Ă  rebours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

167

RĂ©aliser un chronomĂštre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

171

Calculer une date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

174

DĂ©velopper un calendrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

179

Temporiser une action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

184

Répéter une action à intervalles réguliers . . . . . . . . . . . . . . . . . . . . . . . . . .

187

RĂ©aliser un planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

190

Planning sur plusieurs mois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

195

CHAPITRE 11

DĂ©placement de personnages ou d’objets . . . . . . . . . . . . . . . . . . . .
DĂ©placement par clics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Déplacement par glisser-déplacer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Déplacement par glisser-déplacer avec perspective . . . . . . . . . . . . . . . . . .
DĂ©placement avec ralentissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Yeux qui suivent la souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RĂ©aliser une loupe sur un plan ou une photo . . . . . . . . . . . . . . . . . . . . . . .
Tester la collision entre deux occurrences . . . . . . . . . . . . . . . . . . . . . . . . . .
ÉlasticitĂ© dans un mouvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

200

221

ÉlasticitĂ© dans un mouvement avec la classe Tween . . . . . . . . . . . . . . . . . .

222

Simuler la gravité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

225

Faire tomber de la pluie ou de la neige . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

229

ContrĂŽle par le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XVIII

199

231

203
208
211
213
214
217
150 scripts Livre Page XIX Lundi, 20. ao t 2007 7:29 07

Table des matiĂšres

SkyScraper dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

235

SkyScraper dynamique avec tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

236

CHAPITRE 12

La scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

239

Informations et contrĂŽle de la scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

239

CHAPITRE 13

Enregistrement de scores et autres données . . . . . . . . . . . . . . . . .

243

Utilisation des cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

244

Enregistrement dans une base MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . .

249

Obtenir un identiïŹant unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

253

PARTIE II
Les médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

255

CHAPITRE 14

ContrÎle des médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

257

RĂ©alisation d’un diaporama dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . .

257

RĂ©alisation d’un diaporama dynamique avec un ïŹchier XML . . . . . . . . .

260

RĂ©alisation d’un diaporama dynamique avec un ïŹchier XML
et de nombreuses photos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RĂ©alisation d’un lecteur MP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RĂ©alisation d’un lecteur vidĂ©o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diffuser une vidéo en streaming (Flash Media Server) . . . . . . . . . . . . . .
RĂ©alisation d’un module de visioconfĂ©rence (Flash Media Server) . . . .
RĂ©alisation d’un module de confĂ©rence (Flash Media Server) . . . . . . . . .
ContrĂŽler une sĂ©quence QuickTime Ă  partir d’une piste Flash . . . . . . .
Interaction du niveau d’entrĂ©e du microphone et de la scĂšne . . . . . . . . .

261
266
271
273
274
279
281
283

Sous-titrer une vidéo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

288

Synchroniser un son avec des textes et des images . . . . . . . . . . . . . . . . . .

290

Synchroniser un son au format FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

294
XIX
150 scripts Livre Page XX Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

CHAPITRE 15

Chat et RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

297

CrĂ©ation d’un chat avec Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . .

297

CrĂ©ation d’un lecteur de ïŹ‚ux RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

302

Lecteur de ïŹ‚ux RSS avec un menu local dĂ©roulant . . . . . . . . . . . . . . . . . . .

308

Lecteur de ïŹ‚ux RSS sans composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

310

PARTIE III
Manipulation du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

313

CHAPITRE 16

Mise en forme du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

315

Mettre du texte en forme (classe TextFormat()) . . . . . . . . . . . . . . . . . . . . .
Mettre du texte en forme (classe TextFormat() et CSS) . . . . . . . . . . . . . . .
Contrîler la casse et la nature d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . .
VĂ©riïŹcation de la saisie d’un texte en cours de frappe . . . . . . . . . . . . . . . .
Le composant DataGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

315
322
327
329
332

CHAPITRE 17

Traitement du texte et des variables . . . . . . . . . . . . . . . . . . . . . . . . . .
VĂ©riïŹer la validitĂ© d’une adresse e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . .

335

Faire dĂ©ïŹler un texte avec ascenseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

337

Faire dĂ©ïŹler un texte avec ascenseur des lignes cliquables . . . . . . . . . . . .

343

Faire dĂ©ïŹler un texte Description du ïŹchier . . . . . . . . . . . . . . . . . . . . . . . .

348

RĂ©aliser un systĂšme de mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

350

RĂ©aliser un module de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

352

Rendre un texte cliquable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

355

GĂ©rer les tabulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

358

AfïŹchage en mode Telex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

362

AfïŹchage en mode AĂ©roport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

363

AfïŹchage de lettres glissant sur la scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . .

365

AfïŹchage d’un texte clignotant avec le ïŹltre GlowFilter . . . . . . . . . . . . .
XX

335

368
150 scripts Livre Page XXI Lundi, 20. ao t 2007 7:29 07

Table des matiĂšres

AfïŹchage d’un texte qui vibre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

370

AfïŹchage d’un texte qui explose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

372

CHAPITRE 18

Manipulation des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

377

AfïŹcher un tableau (array) sous forme de liste . . . . . . . . . . . . . . . . . . . . .

377

RĂ©aliser un quadrillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

381

RĂ©aliser une grille de calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

384

Manipuler les tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

388

PARTIE IV
Les jeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

391

CHAPITRE 19

Jeux pour enfants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

393

Jeu du Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

393

Puzzle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

399

Puzzle avec chargement dynamique de photos . . . . . . . . . . . . . . . . . . . . . .

404

Jeu de coloriage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

408

Jeu de mémoire sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

412

Jeu du morpion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

417

Jeu du serpent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

421

Jeu du taquin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

425

Jeu du pendu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

428

Jeu du pendu avec plusieurs parties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

433

CHAPITRE 20

Autres jeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

437

Machine Ă  sous (jackpot) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

437

Jeu de tir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

446

Jeu de grattage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

451
XXI
150 scripts Livre Page XXII Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Jeu de grattage avec utilisation d'un masque . . . . . . . . . . . . . . . . . . . . . . . .

453

Jeu de dames en réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

455

Jeu du chemin le plus court . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

462

ModĂšles pour le jeu du chemin le plus court . . . . . . . . . . . . . . . . . . . . . . . . .

468

Exercice pédagogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

469

PARTIE V
Autres fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

473

CHAPITRE 21

Impression, e-mail et fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

475

Envoyer un e-mail Ă  partir de Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

475

Imprimer une animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

476

Centrer une animation dans la fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

482

Redimensionner la fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

484

Ouvrir une pop-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

485

Appeler une fonction JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

485

CHAPITRE 22

System.capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

487

Connaütre la langue de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

487

Connaütre le systùme d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

491

ConnaĂźtre la version du Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

492

CHAPITRE 23

CD-Rom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Créer un projecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

496

Contrîles d’une projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XXII

495

497
150 scripts Livre Page XXIII Lundi, 20. ao t 2007 7:29 07

Table des matiĂšres

ANNEXE
Notions complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

501

Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Comment ça marche ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Créer une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GĂ©nĂ©rer un ïŹ‚ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Envoyer et recevoir un ïŹ‚ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les SharedObject avec Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . . .
Établir une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
indexOf() ou la recherche d’une chaüne . . . . . . . . . . . . . . . . . . . . . . . . . . . .

503
503
504
505
506

Mise en forme du texte avec la classe TextFormat() . . . . . . . . . . . . . . . . . .

513

Changer la couleur d’une occurrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classe Color() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MĂ©thode ColorTransform() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

514
515
515

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

517

508
509
511

XXIII
150 scripts Livre Page XXIV Lundi, 20. ao t 2007 7:29 07
150 scripts Livre Page 1 Lundi, 20. ao t 2007 7:29 07

Introduction
Se préparer à la lecture
de l’ouvrage

Comme nous l’évoquions dans l’avant-propos, nous prĂ©fĂ©rons nous assurer que vous
maütrisez certaines bases de l’ActionScript avant de vous lancer dans la lecture de cet
ouvrage. Nous vous encourageons donc vivement à parcourir les quelques pages qui suivent car elles présentent des rappels élémentaires nécessaires pour une bonne compréhension des analyses des études de cas proposées dans ce livre.
En ïŹn d’ouvrage, l’annexe vous fournira des explications communes Ă  plusieurs Ă©tudes de
cas. À l’inverse, cette introduction vous offre en amont un rappel des notions Ă©lĂ©mentaires
telles que :
‱ l’utilisation du XML dans Flash ;
‱ l’interprĂ©tation du nom d’une occurrence ;
‱ la gestion des lignes d’instructions contenues dans une boucle for() ;
‱ le sens du mot-clĂ© this selon les contextes.
Il ne s’agit ni de simples introductions, ni d’explications acadĂ©miques exhaustives. Ces
notions sont primordiales pour un dĂ©veloppeur Flash et nous les utiliserons trĂšs souvent dans nos Ă©tudes de cas, c’est pourquoi nous commencerons par les Ă©tudier
ensemble ici.
150 scripts Livre Page 2 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Utilisation du XML dans Flash
Comprendre le XML dans Flash
Aujourd’hui, il est trĂšs difïŹcile de concevoir un dĂ©veloppement sans faire appel Ă  un
ïŹchier XML, mais Ă  quoi sert exactement cette technologie ?
Lorsque vous avez besoin de manipuler des données dans une animation Flash, dans le
but de les traiter ou de les afïŹcher sur la scĂšne au moment de la lecture d’un ïŹchier .swf,
plusieurs solutions s’offrent à vous.
‱ Les variables peuvent contenir ces informations, mais il en faudra autant que vous avez
de valeurs Ă  stocker/traiter. Cette technique n’est donc pas adaptĂ©e.
‱ Les tableaux prĂ©sentent l’avantage de pouvoir contenir plusieurs valeurs, mais le manque de souplesse dans le traitement des donnĂ©es contenues fait de cette technique une
solution inadaptée.
Dans ce cas, quelle autre possibilitĂ© avons-nous ? Dans certaines applications, l’utilisation
d’un ïŹchier texte contenant des paires variable = valeur & variable2 = valeur
 pourrait nous sufïŹre, mais cette technique reste proche de celle du tableau. La meilleure des
solutions reste tout de mĂȘme l’utilisation du XML. Malheureusement, cette derniĂšre
solution a mauvaise rĂ©putation auprĂšs des novices car elle semble compliquĂ©e par l’apparence des documents qu’il est nĂ©cessaire de gĂ©nĂ©rer en XML et des lignes d’instructions en
ActionScript qu’il faut saisir. Relevons le dĂ©ïŹt !
Le principe d’un ïŹchier XML est de contenir des balises qui en imbriquent d’autres.
Avant d’aller plus loin et d’ĂȘtre trop technique, commençons par ce petit exemple Ă  la
portée de tout le monde, y compris les néophytes.
Imaginons un bĂątiment, celui d’une bibliothĂšque, qui contiendrait quatre Ă©tages proposant des publications classĂ©es par thĂšmes. Au premier Ă©tage, des livres pour les jeunes, au
deuxiĂšme, des publications scientiïŹques, au troisiĂšme des romans et CD et enïŹn au dernier Ă©tage les publications de presse. Voici Ă  quoi pourrait ressembler la structure principale du document XML.
<Bibliotheque>
<Accueil></Accueil>
<Jeunes></Jeunes>
<Sciences></Sciences>
<Loisirs></Loisirs>
<Presse></Presse>
</Bibliotheque>

Vous remarquerez qu’une balise ouverte est obligatoirement fermĂ©e. Si elle ne l’est pas, le
document n’est pas valide et il sera alors impossible de le parcourir, comme dans l’exemple
suivant oĂč la balise <Sciences> est mal fermĂ©e.
<Bibliotheque>
<Accueil></Accueil>
<Jeunes></Jeunes>

2
150 scripts Livre Page 3 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

<Sciences><Sciences>
<Loisirs></Loisirs>
<Presse></Presse>
</Bibliotheque>

Remarque
Parser un document, revient Ă  lire et interprĂ©ter le contenu d’un document. Le terme « arbre »
est également un synonyme de « document XML ».

SimpliïŹons davantage notre premier exemple aïŹn d’y ajouter des valeurs.
<Bibliotheque>
<Accueil>1</Accueil>
<Jeunes>3</Jeunes>
<Sciences>2</Sciences>
</Bibliotheque>

Les trois chiffres que nous venons d’ajouter correspondent au personnel affectĂ© Ă  chaque
Ă©tage.
Avant d’aller plus loin, apportons un premier mot de vocabulaire. Le nƓud est un terme
qui désigne un niveau dans un document. Il contient deux balises, une qui indique son
ouverture et une autre qui indique sa fermeture. Entre les deux balises, on place une
valeur.
<Jeunes>3</Jeunes>

L’exemple ci-dessus est donc un nƓud dont le nom de balise est Jeunes, il contient une
valeur, Ă  savoir le chiffre 3.
Il existe une autre syntaxe qui ne contient qu’une seule balise. Dans ce cas, elle ne peut
contenir que des attributs, mais pas de valeurs.
<Jeunes effectifs= "3"/>

Dans l’exemple ci-dessus, la balise dont le nom est Jeunes contient un attribut intitulĂ©
effectifs dont la valeur est 3.
Dois-je utiliser plutĂŽt des valeurs ou attributs ? On se pose souvent cette question. Ne
choisissez pas de crĂ©er tous vos documents XML avec des nƓuds contenant des valeurs
sans attributs et inversement. Selon la nature de vos besoins, vous combinerez d’ailleurs
sûrement les deux. Vous découvrirez au travers des différentes études de cas de ce livre,
que les exemples sont tous trÚs différents.
Remarque
L’avantage d’utiliser les attributs est de pouvoir faire rĂ©fĂ©rence Ă  un nom sans se soucier de sa
position.

3
150 scripts Livre Page 4 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Avant d’apprendre à charger un document XML dans un SWF, comment fait-on pour le
créer ?

Créer un document XML
La technique est trĂšs simple, commencez par lancer un Ă©diteur de texte qui gĂšre de prĂ©fĂ©rence l’UTF-8, puis suivez ces instructions :
1. Créez un nouveau document.
2. Saisissez le script simpliïŹĂ© (5 lignes de script ïŹgurant page 3).
3. Enregistrez votre document sous le nom biblio.xml.
Remarque
Assurez-vous que l’encodage du ïŹchier est en Unicode ou en UTF-8. Utilisez le bouton Options
ou le menu local dĂ©roulant dans la fenĂȘtre d'enregistrement pour dĂ©ïŹnir ou vĂ©riïŹer le format.
Parfois, ce rĂ©glage doit se faire dans les menus du logiciel ou dans sa barre d'outils, car il s’agit
d’un attribut ou d’une propriĂ©tĂ© de la page.

Les spĂ©cialistes en XML pourraient crier au scandale ! « Il ne parle mĂȘme pas de l’encodage, ni de la version du XML qu’il faut prĂ©ciser sur la premiĂšre ligne du document ».
Oui, ce document est vraiment simpliïŹĂ©, mais nous devons apprendre le strict minimum
pour commencer. Cette structure fonctionne trùs bien, il n’y a aucune raison pour que
nous soyons exhaustif Ă  ce niveau-lĂ  des explications.

Charger un document XML
Quel est le code en ActionScript qui permet de charger le contenu de ce document dans
un SWF ?
var charge = new XML();
charge.load("biblio.xml");

VoilĂ , c’est tout ! Le contenu du ïŹchier biblio.xml est Ă  prĂ©sent dans le SWF et plus particuliĂšrement dans l’instance intitulĂ©e charge qui est comparable Ă  une variable. Il aura
sufïŹ de crĂ©er une instance de la classe XML avec le constructeur new puis de charger le
ïŹchier au moyen de la mĂ©thode load() de la classe XML(). Le player Flash a chargĂ© le
contenu du ïŹchier, puis il a lu toutes les lignes du document.
Remarque
La premiĂšre ligne d’un document XML porte le numĂ©ro d'index 0. Dans notre exemple, nous
avons deux nƓuds dont les numĂ©ros d'index sont 0 et 1.

4
150 scripts Livre Page 5 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

Avant de continuer les explications, nous devons résoudre un premier problÚme. Si un
saut de paragraphe a été inséré entre les deux lignes Jeunes et Sciences, est-ce que le player
Flash doit comptabiliser la ligne vide comme un nƓud ?
<Bibliotheque>
Jeunes>3</Jeunes>
<Sciences>2</Sciences>
</Bibliotheque>

Est-ce que le nƓud <Sciences> porte l’index 1 ou 2 ? Il serait trĂšs difïŹcile de se passer des
sauts de paragraphe générés volontairement pour espacer les lignes, structurer ainsi
l’arbre et faciliter sa lecture. Si une ligne de commentaire est ajoutĂ©e, comment prĂ©ciser
au player Flash qu’il ne s’agit pas d’un nƓud ? Tout simplement en lui signiïŹant que les
blancs (lignes vides et commentaires) doivent ĂȘtre ignorĂ©s.
var charge = new XML();
charge.load("biblio.xml");
charge.ignoreWhite = true;
Attention
N’oubliez pas de saisir un W majuscule au milieu de la propriĂ©tĂ© ignoreWhite.

À ce niveau-là de l’explication, nous avons bien compris que le contenu du document
XML se trouve dans charge. Mais comment lire les nƓuds contenus dans l’instance ?
Avant de répondre à cette question, une autre se pose.
Vous constaterez rapidement que certains documents XML peuvent ĂȘtre trĂšs longs, donc
trĂšs lourds Ă  charger. Lorsque la ligne d’instruction charge.load("biblio.xml") s’exĂ©cute,
les donnĂ©es sont-elles dans la mĂ©moire vive de l’ordinateur en une fraction de seconde ?
Tout dépend de la vitesse de votre connexion à Internet et du poids du document. Quoi
qu’il en soit, le temps de chargement du ïŹchier XML sera beaucoup plus long que le
temps d’exĂ©cution des lignes d’instructions de votre script. En partant de ce constat, il est
plus facile de comprendre pourquoi nous n’avons pas le droit d’ajouter la ligne suivante :
var charge = new XML();
charge.load("biblio.xml");
charge.ignoreWhite = true;
vAffichage = charge;

La variable vAffichage est celle d’un texte dynamique sur la scĂšne. En exĂ©cutant ce script,
nous pourrions nous attendre Ă  ce que le contenu de l’instance vienne s’afïŹcher sur la
scùne. Et bien non ! Il faut d’abord s’assurer que le contenu du document XML est bien
chargé en mémoire vive de votre ordinateur avant de tenter de faire appel à lui. Nous
devons donc ajouter ce gestionnaire :
var charge = new XML();
charge.load("biblio.xml");
charge.ignoreWhite = true;

5
150 scripts Livre Page 6 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

charge.onLoad = function() {
vAffichage = charge;
};

Au moment oĂč le chargement est terminĂ©, la variable vAffichage va enïŹn pouvoir contenir
charge.
VoilĂ , si vous n’ĂȘtes pas sĂ»r(e) d’avoir tout compris, nous vous invitons vivement Ă  relire
ces explications car nous allons Ă  prĂ©sent essayer de comprendre comment lire un nƓud.

Lire un nƓud
Attention
Avant toute chose, il est important que vous sachiez que les nƓuds d’une instance XML fonctionnent sur le mĂȘme principe que les entrĂ©es d’un tableau. Le premier nƓud porte l'index 0.

La technique est une fois encore trĂšs simple, soyons mĂ©thodiques et n’allons pas trop vite.
Imaginons que nous ayons deux textes dynamiques sur la scĂšne dont les noms de variables sont nbrPersonnesJeunes et nbrPersonnesSciences. Voici Ă  quoi devrait ressembler le
script de votre animation pour placer le contenu de l’instance charge sur la scùne.
Remarque
À partir de maintenant, nous ne reprenons plus les trois premiùres lignes du script, elles seront
Ă  chaque fois sous-entendues.

charge.onLoad = function() {
nbrPersonnesJeunes = charge.childNodes[0].childNodes[0];
nbrPersonnesSciences = charge.childNodes[0].childNodes[1];
};

Mais que signiïŹe charge.childNodes[0] ? Pour mieux comprendre, voici le contenu d’un
document XML qui n’est pas valide, mais nĂ©anmoins acceptĂ© par Flash.
<Bibliotheque>
<Jeunes>3</Jeunes>
<Sciences>2</Sciences>
</Bibliotheque>
<Piscine>
<Bassin>3</Bassin>
<Administratif>2</Administratif>
</Piscine>

AprĂšs chargement du ïŹchier XML, nous pouvons dire que l’instance charge contient
l’ensemble des balises. Donc, nous devons toujours commencer une ligne d’instruction
par charge pour y faire rĂ©fĂ©rence. Maintenant, pourquoi Ă©crire childNodes[0] systĂ©matiquement aprĂšs le nom de l’instance ? Dans notre exemple d’origine la premiĂšre et unique
6
150 scripts Livre Page 7 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

balise s’intitule Bibliotheque. Il n’existe pas d’autre balise à la racine. Elle porte donc le
numĂ©ro d’index 0, d’oĂč le rĂ©sultat charge.childNodes[0], c’est-Ă -dire le nƓud dont
l’index est 0 dans l’instance charge.
Dans le dernier exemple donnĂ©, nous avons deux balises Ă  la racine. Bibliotheque et Piscine. Imaginez qu’un arbre ait deux troncs Ă  la base ! Ce ne serait plus un arbre ! MĂȘme si
la nature le tolĂšre sĂ»rement, en XML, cela n’est pas possible. Alors le script qui va suivre
est accepté en ActionScript, mais pas dans les applications qui gÚrent correctement le
XML.
nbrPersonnesJeunes = charge.childNodes[0].childNodes[0];
nbrPersonnesBassin = charge.childNodes[1].childNodes[0];

Les deux lignes suivantes vont s’afïŹcher dans les textes dynamiques sur la scĂšne.
<Jeunes>3</Jeunes>
<Bassin>3</Bassin>

Retenons donc que la valeur du premier childNodes ne peut ĂȘtre diffĂ©rente de 0.
Pourquoi ne peut-on pas obtenir 3 à la place de <Jeunes>3</Jeunes> ? C’est à nous d’indiquer au player Flash qu’il doit aller plus loin dans l’arborescence. Si nous reprenons donc
correctement notre code, voici Ă  quoi il doit ressembler :
nbrPersonnesJeunes = charge.childNodes[0].childNodes[0].firstChild;
nbrPersonnesSciences = charge.childNodes[0].childNodes[1].firstChild;

Essayons de traduire ce que comprend le player Flash.
charge.Bibliotheque.Jeunes.firstChild;

Le mot firstChild revient Ă  Ă©crire childNodes[0], c’est-Ă -dire la premiĂšre information contenue dans un nƓud. La valeur 3 est donc considĂ©rĂ©e comme un nƓud, tout du moins considĂ©rĂ©e comme la premiĂšre information contenue dans charge.Bibliotheque[0].Jeunes[0].
Imaginons Ă  prĂ©sent que les nƓuds <Jeunes> et <Sciences> en contiennent d’autres.
<Bibliotheque>
<Jeunes>
<Personne>Laurence</Personne>
<Personne>Lola</Personne>
<Personne>Manon</Personne>
<Personne>Julie</Personne>
</Jeunes>
<Sciences>
<Personne>Pascale</Personne>
<Personne>Celia</Personne>
<Personne>Charlene</Personne>
</Sciences>
</Bibliotheque>

Notre ïŹchier XML ne se contente plus de contenir des numĂ©ros indiquant les effectifs,
mais des noms de personnes affectées aux étages des Jeunes et des Sciences.
7
150 scripts Livre Page 8 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Pour lire Julie, il faut donc demander au player Flash de passer par les nƓuds suivants :
vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].firstChild;

Sur la scĂšne, un texte dynamique dont le nom de variable est vResponsable va afïŹcher le
mot Julie.
Vous savez Ă  prĂ©sent parcourir tout un document. Nous n’aborderons pas dans ce chapitre la combinaison du XML dans Flash avec les boucles for() car de nombreuses Ă©tudes
de cas font appel Ă  cette combinaison. Nous analyserons la structure du script, mais pour
l’instant, revenons plutĂŽt sur une notion trĂšs intĂ©ressante. Jusqu’à prĂ©sent, nous avons
utilisé des valeurs telles que : 3 et Julie, mais que sont les attributs en XML ?

Lire un attribut
Le document XML suivant présente à nouveau une partie des effectifs de notre bibliothÚque, mais sous une forme différente. Imaginons en effet que nous ayons de nombreux
nƓuds, c’est-à-dire de nombreuses lignes. Est-il indispensable d’avoir une valeur pour
chaque nƓud ?
<Bibliotheque>
<Jeunes>
<Personne nom="Laurence"/>
<Personne nom="Lola"/>
<Personne nom="Manon"/>
<Personne nom="Julie"/>
</Jeunes>
</Bibliotheque>

Cette syntaxe prĂ©sente l’avantage de simpliïŹer votre document car les lignes y sont moins
longues et plus claires dùs lors qu’on a compris la notion d’attribut.
Voici une méthode pour lire un attribut.
1. Commencez par prĂ©ciser le chemin du nƓud dont vous souhaitez lire un attribut.
vResponsable = charge.childNodes[0].childNodes[0].childNodes[3]

2. Ajoutez le mot attributes séparé par un point.
vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].attributes

3. Pour ïŹnir, indiquez le nom de l’attribut.
vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].attributes.nom;

PrĂ©cisons qu’une balise peut contenir plusieurs attributs comme dans l’exemple suivant.
<Personne nom="Laurence" age = "35" profession ="Enseignante"/>

Si vous le souhaitez, vous pouvez combiner les attributs et les valeurs dans une balise.
Voici ce que cela pourrait donner :
<Personne age = "37" yeux ="noirs" taille ="165">Laurence</Personne>

8
150 scripts Livre Page 9 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

Pointer directement sur un nƓud grĂące Ă  la propriĂ©tĂ© idMap
Avec l’arrivĂ©e de Flash 8, une nouvelle propriĂ©tĂ© a fait son apparition
 et quelle propriĂ©tĂ© !
Dans Flash MX 2004 et les versions antĂ©rieures, pour atteindre un nƓud prĂ©cis, vous
deviez parcourir toute l’arborescence de votre instance XML. Avec le player Flash 8, vous
avez la possibilitĂ© d’utiliser la propriĂ©tĂ© idMap pour pointer directement sur un nƓud qui
doit posséder obligatoirement un attribut intitulé id, quel que soit son niveau.
Prenons l’exemple d’un ïŹchier intitulĂ© societe.xml dont la structure est la suivante :
<Bibliotheque>
<Personne id="Marie" nom="Dupond">
<Profession>Enseignante</Profession>
<Age>27</Age>
</Personne>
<Personne id="Marc" nom="Martin">
<Profession>Coursier</Profession>
<Age>24</Age>
</Personne>
<Personne id="JĂ©rĂŽme" nom="Durand">
<Profession>Responsable de département</Profession>
<Age>35</Age>
</Personne>
</Bibliotheque>

Ce document contient trois nƓuds enfants de niveau 1 à la racine. Chacun possùde deux
propriĂ©tĂ©s intitulĂ©es id et nom. Pour pointer sur le nƓud 2 de niveau 1 (JĂ©rĂŽme Durand), il
faudrait utiliser le script suivant :
charge = new XML();
charge.load("societe.xml");
charge.ignoreWhite = true;
charge.onLoad = function() {
resultat = charge.firstChild.childNodes[2];
};

Il existe une solution plus simple qui fait appel à la propriété idMap.
charge = new XML();
charge.load("societe.xml");
charge.ignoreWhite = true;
charge.onLoad = function() {
resultat = charge.idMap["JĂ©rĂŽme"];
};

Comme vous pouvez le constater, il est plus aisé de faire référence à une information qui
parle davantage qu’un numĂ©ro. Attention toutefois Ă  certains abus : que se passe-t-il s’il
existe plusieurs JĂ©rĂŽme dans notre arborescence ? Et bien ce sera le dernier nƓud qui
possùde cette valeur d’attribut qui sera retenu.
9
150 scripts Livre Page 10 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Par consĂ©quent, utilisez cette technique avec des valeurs qui doivent ĂȘtre uniques d’un
nƓud Ă  l’autre, telles qu’un numĂ©ro de sĂ©curitĂ© social, une clĂ© primaire propre Ă  un enregistrement, un code personnel, etc.
Notre exemple est volontairement simple pour cette premiĂšre approche du XML. PrĂ©cisons tout de mĂȘme que la propriĂ©tĂ© idMap est Ă©galement trĂšs intĂ©ressante pour les nƓuds
dont le niveau est élevé, cela permet de raccourcir les chemins. Voici une comparaison,
partons de ce nouveau document.
<Bibliotheque>
<Jeunes>
<Personne id="Marie" nom="Dupond">
<Profession>Enseignante</Profession>
<Age>27</Age>
</Personne>
<Personne id="Marc" nom="Martin">
<Profession>Coursier</Profession>
<Age>24</Age>
</Personne>
<Personne id="JĂ©rĂŽme" nom="Durand">
<Profession>Responsable de département</Profession>
<Age>35</Age>
</Personne>
</Jeunes>
<Sciences>
<Personne id="Eva" nom="Girondon">
<Profession>En retraite</Profession>
<Age>58</Age>
</Personne>
<Personne id="Daniel" nom="Duvent">
<Profession>En congés paternité</Profession>
<Age>26</Age>
</Personne>
<Personne id="Georges" nom="Maltris">
<Profession>En maladie</Profession>
<Age>35</Age>
</Personne>
</Sciences>
</Bibliotheque>

Pour afïŹcher En retraite dans un texte dynamique intitulĂ© etatActuel sur la scĂšne, voici
les deux méthodes :
‱ avec utilisation de la propriĂ©tĂ© idMap :
charge.onLoad = function() {
etatActuel = charge.idMap["Eva"].childNodes[0].firstChild;
};

‱ avec la rĂ©fĂ©rence Ă  un chemin relatif Ă  la racine :
charge.onLoad = function() {
etatActuel = charge.firstChild.childNodes[1].childNodes[0].childNodes[0].firstChild;
}

10
150 scripts Livre Page 11 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

Informations complémentaires
Nombre de nƓuds
TrĂšs souvent, vous aurez besoin de connaĂźtre le nombre de nƓuds contenus Ă  l’intĂ©rieur
d’un autre. C’est la propriĂ©tĂ© length qui vous permettra de compter ces lignes. Dans notre
dernier exemple, le nƓud <Jeunes> en contient 3. Voici la ligne d’instruction qui permet
de renvoyer cette valeur.
nbrNoeuds = charge.childNodes[0].childNodes[0].childNodes.length;

Vous constaterez que le dernier childNodes n’est pas spĂ©ciïŹĂ©, c’est normal car vous souhaitez obtenir le nombre de tous les nƓuds et non un en particulier ! Il ne faut pas aller
trop loin. Comme nous l’avions fait prĂ©cĂ©demment, essayons de traduire cette ligne
d’instruction.
nbrNoeuds = charge.Bibliotheque[0].Jeunes.tousSesNoeuds.length;

Nom d’un nƓud
Dans certains cas, il s’avĂšre trĂšs pratique d’exploiter le nom d’un nƓud s’il est reprĂ©sentatif.
Dans cet exemple, nous constaterons qu’il est trĂšs aisĂ© de lire cette information.
<Bibliotheque>
<Jeunes>
<Personne>
<Nom>Dupond</Nom>
<Profession>Enseignante</Profession>
<Age>27</Age>
</Personne>
</Jeunes>
</Bibliotheque>

vNom = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeName;
vProfession = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[1].nodeName;
vAge = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[2].nodeName;

Utilisez le mot nodeName comme vous l’avez fait avec attributes. La seule difïŹcultĂ© reste
une fois encore d’indiquer le bon chemin, mais là il n’y a pas de piùge !

Premier exemple
Imaginons ce scénario qui contiendra des imbrications :
Vous vous rendez dans la bibliothĂšque de votre ville, car vous avez besoin d'un ouvrage.
ArrivĂ© Ă  l’accueil qui se trouve au rez-de-chaussĂ©e, on vous indique que quatre Ă©tages sont Ă 
votre disposition. Les horaires vous sont communiquĂ©s ainsi que les jours d’ouverture. Il s’agit
d’un bĂątiment de cinq Ă©tages. Le premier est consacrĂ© aux livres pour les jeunes enfants. Le
deuxiĂšme regroupe les publications scientiïŹques destinĂ©es aux Ă©tudiants et professionnels.
11
150 scripts Livre Page 12 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Le troisiÚme étage propose des romans et une CDthÚque (CD-Rom et CD audio). Le quatriÚme est consacré à la presse (publications quotidiennes, hebdomadaires et mensuelles
uniquement). EnïŹn, le dernier Ă©tage auquel vous n’avez pas accĂšs est rĂ©servĂ© Ă  l’administration.
Essayons de représenter votre bibliothÚque sous forme de diagramme.

Figure I-1
La structure d’un document XML s’appuie sur ce genre de diagramme.

L’effort de comprĂ©hension que vous avez Ă  faire pour lire ce diagramme est minime car
nous vous avons expliquĂ© prĂ©alablement sa signiïŹcation. Nous n’allons pas tout de suite
vous prĂ©senter le ïŹchier XML correspondant avec des articles dans les avant-derniers
nƓuds, vous pourriez prendre peur. Commençons plutĂŽt par une reprĂ©sentation simpliïŹĂ©e.
<Bibliotheque>
<Jeunes>
<Scolaires></Scolaires>
<BD></BD>
<Lecture></Lecture>
</Jeunes>
<Sciences>

12
150 scripts Livre Page 13 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

<Physique></Physique>
<Chimie></Chimie>
<Telecommunications></Telecommunications>
</Sciences>
<Loisirs>
<CDTheque>
<CDAudio></CDAudio>
<CDRom></CDRom>
</CDTheque>
<Romans>
<Policiers></Policiers>
<Amour></Amour>
</Romans>
</Loisirs>
<Presse>
<Quotidienne></Quotidienne>
<Hebdo></Hebdo>
<Mensuelle></Mensuelle>
</Presse>
</Bibliotheque>

PremiĂšre observation : deux balises peuvent se suivre sur la mĂȘme ligne ou l’une sous
l’autre. Cela n’a aucune importance. Si vous avez une seule information à enfermer entre
deux balises, autant le faire sur une seule ligne. Dans le cas des balises <Jeunes> et </Jeunes>,
vous constatez qu’il y a plusieurs informations à stocker, vous n’avez plus le choix, vous
ĂȘtes obligĂ© de le faire sur plusieurs lignes.
Pour faciliter davantage la lecture de ce document, nous allons dĂ©couper l’arbre XML en
plusieurs parties.
Cet exemple représente la bibliothÚque et ses étages.
<Bibliotheque>
<Jeunes></Jeunes>
<Sciences></Sciences>
<Loisirs></Loisirs>
<Presse></Presse>
</Bibliotheque>

Voici une autre structure qui aboutit au mĂȘme rĂ©sultat.
<Bibliotheque>
<Jeunes>
</Jeunes>
<Sciences>
</Sciences>
<Loisirs>
</Loisirs>

13
150 scripts Livre Page 14 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

<Presse>
</Presse>
</Bibliotheque>

Penchons-nous Ă  prĂ©sent sur le troisiĂšme nƓud. Il possĂšde deux nƓuds enfants.
<Loisirs>
<CDTheque>
</CDTheque>
<Romans>
</Romans>
</Loisirs>

Ces deux nƓuds possùdent à leur tour des nƓuds enfants :
<CDTheque>
<CDAudio></CDAudio>
<CDRom></CDRom>
</CDTheque>

et
<Romans>
<Policiers></Policiers>
<Amour></Amour>
</Romans>

Nous allons nous arrĂȘter lĂ , vous l’aurez compris, lorsque vous ouvrez une balise, deux
solutions s’offrent à vous.
‱ Vous ajoutez deux autres balises (ouvrantes et fermantes) avant de la fermer.
‱ Vous la fermez aprùs avoir simplement saisi une valeur.
AprÚs cette démonstration, essayez de lire le document suivant en faisant abstraction
dans un premier temps des donnĂ©es qu’il contient (les livres et CD).
<Bibliotheque horaires="8H00-12H00 et 13H00-17H30" joursOuverture="Du lundi au samedi">
<Jeunes>
<Scolaires>
<Livre numero = "00001" editeur = "Hachette">La France de 1900 Ă  nos jours</Livre>
<Livre numero = "00002" editeur = "Bayard">Mathématiques en 6e</Livre>
</Scolaires>
<BD>
<Livre numero = "00034" editeur = "Casterman">Toto en Amérique</Livre>
<Livre numero = "00035" editeur = "Casterman">Toto au Tibet</Livre>
</BD>
<Lecture>
<Livre numero = "00370" editeur = "Le PĂ©ron">Les aventures de Marine</Livre>
<Livre numero = "00371" editeur = "Le péron">Qui est arrivé au Tibet ?</Livre>
</Lecture>
</Jeunes>
<Sciences>

14
150 scripts Livre Page 15 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

<Physique>
</Physique>
<Chimie>
</Chimie>
<Telecommunications>
</Telecommunications>
</Sciences>
<Loisirs>
<CDTheque>
<CDAudio>
<CD numero = "100001" editeur = "Plusieurs grammes">Brel</CD>
<CD numero = "100002" editeur = "Plusieurs grammes">Gainsbourg</CD>
</CDAudio>
<CDRom>
<CD numero = "200001" editeur = "Montarnace">Le soleil jaune</CD>
<CD numero = "200002" editeur = "Montarnace">Gribiste le chaton</CD>
</CDRom>
</CDTheque>
<Romans>
<Policiers>
<Livre numero = "00642" editeur = "Dective">Qui a tué le grand ?</Livre>
<Livre numero = "00643" editeur = "Dective">Sur les traces de Robert</Livre>
</Policiers>
<Amour>
<Livre numero = "00798" editeur = "Lovatrice">Ils s'aiment dans le vent</Livre>
<Livre numero = "00799" editeur = "Lovatrice">L'amour impossible</Livre>
</Amour>
</Romans>
</Loisirs>
<Presse>
<Quotidienne>
<Journal numero = "900001" date ="03/02/1970">Le matin</Journal>
<Journal numero = "900002" date ="03/02/1970">Le soir</Journal>
</Quotidienne>
<Hebdo>
<Magazine numero = "900008" date ="03/02/1970">Le nouveau regardeur</Magazine>
<Magazine numero = "900009" date ="03/02/1970">La femme au drapeau</Magazine>
</Hebdo>
<Mensuelle>
<Magazine numero = "900032" date ="02/1977">ProblĂšmes Constants Magazine</Magazine>
<Magazine numero = "900033" date ="02/1977">Meilleurs Achats Consommateurs</Magazine>
</Mensuelle>
</Presse>
</Bibliotheque>

Voilà, nous venons de créer un document XML que vous seriez susceptible de devoir
concevoir en mĂ©langeant valeurs et attributs. Se passer de l’un ou de l’autre aurait Ă©tĂ©
dommage.
15
150 scripts Livre Page 16 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

DeuxiĂšme exemple
Prenons l’exemple d’un coursier qui doit tous les jours aller chercher une enveloppe dans une
sociĂ©tĂ© X pour l’emmener dans une autre. Christophe, notre coursier, connaĂźt bien la
sociĂ©tĂ© X, il n’a plus besoin de demander Ă  l’accueil qu’on lui apporte le paquet qu’il doit
transporter, il va le chercher directement.
La structure d’un document XML est comparable Ă  n’importe quelle construction immobiliĂšre qui reprĂ©sente un ensemble composĂ© de sous-parties. L’enveloppe que doit aller chercher
Christophe se trouve quelque part sur une Ă©tagĂšre dans les locaux de la sociĂ©tĂ© commanditaire. L’immeuble est composĂ© d’étages qui contiennent des services ou dĂ©partements qui,
eux-mĂȘmes, contiennent des bureaux ou piĂšces qui contiennent Ă  leur tour des armoires avec
des Ă©tagĂšres. Sur une mĂȘme Ă©tagĂšre, il y a des parties. À gauche de l’étagĂšre, au centre et Ă 
droite, ce sont autant d’emplacements diffĂ©rents sur lesquelles on peu placer des documents.
Christophe doit donc aller chercher une enveloppe qui se trouve au troisiĂšme Ă©tage, au
service du courrier, bureau 320, dans la troisiĂšme armoire (en partant de la gauche), sur
la premiĂšre Ă©tagĂšre en partant du haut. Comment pourrions-nous reprĂ©senter cette hiĂ©rarchie s’il s’agissait d’un document XML ?
La société X a choisi de répartir un service par étage, nous pourrions donc déjà représenter sa
structure sous cette forme :
<SocieteX>
<Commercial></Commercial>
<Technique></Technique>
<Communication></Communication >
<Administratif></Administratif >
</SocieteX>

Pour l’instant, nous avons un document XML qui contient quatre nƓuds enfants à la
racine. Le troisiĂšme nƓud (dont le numĂ©ro d’index est 2, car le premier porte le numĂ©ro
d’index 0) est l’étage Communication. Ajoutons-lui des services.
<SocieteX>
<Commercial></Commercial>
<Technique></Technique>
<Communication>
<CommInterne>
</CommInterne>
<CommExterne>
</CommExterne>
<Courrier>
</Courrier>
</Communication >
<Administratif></Administratif >
</SocieteX>

Les services de communication interne et externes et de courrier ont été ajoutés. Si nous
essayons maintenant d’imaginer Ă  quoi pourrait ressembler un service ou un dĂ©partement dans une entreprise, nous avons deux solutions. Soit, ce sont des open spaces, soit
16
150 scripts Livre Page 17 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

des bureaux qui délimitent les emplacements des différents employés et donc des activités. Au service du courrier, deux personnes ont été affectées. Hervé et David. Ils ont
chacun leur bureau. Dans celui de David, il y a trois armoires.
<SocieteX>
<Commercial>
</Commercial>
<Technique>
</Technique>
<Communication>
<CommInterne>
</CommInterne>
<CommExterne>
</CommExterne>
<Courrier>
<Bureau numero = "319" occupant = "Hervé TIVERT" />
<Bureau numero = "320" occupant = "David LOUIS">
<Armoire></Armoire>
<Armoire></Armoire>
<Armoire>
<Etagere> courrierExpeditionCoursier.pdf </Etagere>
<Etagere></Etagere>
<Etagere></Etagere>
</Armoire>
</Bureau>
</Courrier>
</Communication>
<Administratif>
</Administratif>
</SocieteX>

La troisiĂšme armoire possĂšde trois Ă©tagĂšres. Souvenez-vous, c’est sur la premiĂšre que
Christophe, notre coursier, doit prendre le pli.
La reprĂ©sentation du document XML est faite, Ă  prĂ©sent, comment pointer vers ce nƓud ?
charge = new XML();
charge.load("SocieteX.xml");
charge.ignoreWhite = true;
charge.onLoad = function() {
pliAPrendre = charge.childNodes[0].childNodes[2].childNodes[2].childNodes[1]
➄.childNodes[2].childNodes[0].childNodes[0];
};

Si vous n’avez pas lu le dĂ©but de ce chapitre, une premiĂšre question vous vient sĂ»rement Ă 
l’esprit : pourquoi y a-t-il autant de nƓuds et surtout à quoi correspondent-ils ? Pour
rĂ©pondre Ă  cette question, nous allons Ă  nouveau essayer d’interprĂ©ter chaque childNodes.
Commençons par rappeler que charge.ChidlNodes[0] est obligatoire, c’est pour indiquer
le chemin des nƓuds à aller chercher.
charge.childNodes[0].communication.courrier.bureau320.armoire3.etagere1

17
150 scripts Livre Page 18 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Attention
La syntaxe de l’exemple ci-dessus n’est pas valable, il s’agit d'une explication sur la base d’une
métaphore.

Le tableau suivant va vous permettre de comprendre comment nous pourrions parcourir
le document XML.
Tableau 1 Correspondance des nƓuds et Ă©tages
Étages

Code

Commercial

charge.childNodes[0].childNodes[0]

Technique

charge.childNodes[0].childNodes[1]

Communication

charge.childNodes[0].childNodes[2]

Administration

charge.childNodes[0].childNodes[3]

Retenons Ă  prĂ©sent que le nƓud qui nous intĂ©resse est celui de la communication, c’est-Ă dire charge.childNodes[0].childNodes[2]. Voici un deuxiĂšme tableau qui vous propose les
diffĂ©rents services disponibles Ă  l’étage de la communication.
Tableau 2 Correspondance des nƓuds et services
Services

Code

Communication interne

charge.childNodes[0].childNodes[2].childNodes[0]

Communication externe

charge.childNodes[0].childNodes[2].childNodes[1]

Courrier

charge.childNodes[0].childNodes[2].childNodes[2]

La ligne d’instruction qui nous intĂ©resse est celle du service courrier. Vous l’aurez compris, il sufïŹt de compter Ă  chaque fois Ă  partir de 0 et de compter le numĂ©ro de ligne,
appelĂ© « index », qui correspond Ă  l’information recherchĂ©e.
Pourquoi y a-t-il un dernier childNodes[0] ? Une fois encore, pour répondre à cette question, essayons de comprendre ce que nous renverrait la ligne suivante si elle ne contenait
pas le dernier childNodes[0] :
pliAPrendre = charge.childNodes[0].childNodes[2].childNodes[2].childNodes[1]
➄.childNodes[2].childNodes[0]
<Etagere>courrierExpeditionCoursier.pdf</Etagere>

La ligne d’instruction vous renvoie le nƓud que vous avez spĂ©ciïŹĂ©. Vous souhaitez obtenir le
contenu de ce nƓud. Dans ce cas, vous disposez de trois solutions :
‱ vous ajoutez childNodes[0] ;
18
150 scripts Livre Page 19 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

‱ vous ajoutez firstChild ;
‱ vous n’ajoutez rien, mais vous cochez la case d’interprĂ©tation des balises HTML du
texte dynamique ou de saisie dans lequel le rĂ©sultat sera afïŹchĂ©.
Figure I-2
Cochez cette case pour demander au
player Flash d’interprĂ©ter les balises
contenues dans un texte dynamique
ou de saisie.

‱ InterprĂ©tation du nom d’une occurrence
Lorsque vous faites rĂ©fĂ©rence au nom d’une occurrence, vous prĂ©cisez le chemin et cela
reprĂ©sente parfois une premiĂšre difïŹcultĂ© pour les nĂ©ophytes. Nous ne reviendrons pas
sur cette notion, car ce n’est pas ici l’objet de ce rappel. En revanche, nous allons dĂ©tailler
la méthode à employer pour faire référence à une occurrence qui a généralement été créée
dynamiquement. Commençons par cet exemple :
_root.attachMovie("balle", "balle_inst", 1);
balle_inst._x = 50;
balle_inst._y = 50;

La premiùre ligne d’instruction a pour fonction de prendre dans la bibliothùque de l’animation, un symbole disponible dont le nom de liaison est balle et de le placer sur la
scĂšne. L’occurrence obtenue est alors appelĂ©e balle_inst. Rappelons que le chiffre dĂ©termine le niveau, c’est-Ă -dire le plan de l’occurrence par rapport aux occurrences qui se
trouvent et se trouveront sur la scùne. Si aucune autre occurrence n’occupe le niveau 1
(ou 0), celle-ci sera toujours en arriĂšre-plan des autres.
Les deux lignes d’instructions qui suivent la premiĂšre que nous venons d’analyser, permettent de placer prĂ©cisĂ©ment l’occurrence obtenue. Dans cet exemple, il n’y a aucune
difïŹcultĂ©, mais voyons Ă  prĂ©sent le cas oĂč plusieurs occurrences auraient Ă  ĂȘtres placĂ©es
sur la scĂšne.
Il n’est pas question de dupliquer ces trois lignes d’instructions autant de fois qu’il y a
d’occurrences à placer sur la scùne. Il faut donc employer une boucle.
for (i=0; i<=10; i++) {
_root.attachMovie("balle", "balle_inst"+i, i);
_root["balle_inst"+i]._x = 15+i*35;
_root["balle_inst"+i]._y = 50;
}

19
150 scripts Livre Page 20 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Observez bien, la mĂ©thode attachMovie() est associĂ©e Ă  _root. Cela signiïŹe donc que les
occurrences qui vont ĂȘtres obtenues seront placĂ©es sur la scĂšne. Si nous avions une occurrence dĂ©jĂ  prĂ©sente sur la scĂšne dont le nom serait tableauControle_inst, nous aurions pu
saisir cette ligne d’instruction :
tableauControle_inst.attachMovie("balle", "balle_inst"+i, i);

Vous l’aurez compris, neuf exemples sur dix disponibles dans les publications traitant de
l’ActionScript font gĂ©nĂ©ralement rĂ©fĂ©rence Ă  _root, mais ce n’est pas la seule solution.
Dans ce cas, voici Ă  quoi devront ressembler les deux lignes qui suivent :
tableauControle_inst ["balle_inst"+i]._x = 15+i*35;
tableauControle_inst ["balle_inst"+i]._y = 50;

Rappelons que les crochets symbolisent l’appartenance. Dans l’exemple suivant, janvier
et février sont bien des valeurs du tableau intitulé mois.
var mois = ["janvier","février","mars","avril","mai","juin"]

Si nous reprenons notre exemple ci-dessus, balle_inst est bien une occurrence de _root
(ou de tableauControle_inst). C’est donc la seule solution pour faire rĂ©fĂ©rence par concatĂ©nation Ă  tous les noms des occurrences numĂ©rotĂ©es. Avez-vous dĂ©jĂ  nommĂ© une occurrence "balle_inst"+i dans la palette PropriĂ©tĂ©s ? Les guillemets et l’opĂ©rateur ne sont pas
autorisĂ©s dans les noms d’occurrences et de variables ! Si vous saisissiez donc la ligne
d’instruction suivante, la player Flash serait incapable de l’interprĂ©ter.
"balle_inst"+i._x = 15+i*35;

Cette erreur est facile Ă  comprendre Ă  partir du moment oĂč vous retiendrez que devant
une propriĂ©tĂ© ou une mĂ©thode, seuls les noms d’instances (occurrences) ou de variables
sont admis.
Astuce
Pour simpliïŹer votre script, nous aurions pu saisir les lignes d'instructions suivantes.

for (i=0; i<=10; i++) {
nelleOccur = _root.attachMovie("balle", "balle_inst"+i, i);
nelleOccur._x = 15+i*35;
nelleOccur._y = 50;
}

Pour ïŹnir, nous allons vous prĂ©senter une syntaxe dont l’avantage est qu’elle permet
d’économiser plusieurs lignes de codes lorsque vous devez rĂ©gler les propriĂ©tĂ©s d’une
occurrence placée sur la scÚne avec les méthodes attachMovie() et duplicateMovieClip().
_root.attachMovie("carte", "carteFrance_inst", 1, {_alpha:60, _x:130, _y:60, _rotation:15});

et
nomduneoccurrence.duplicateMovieClip("nomcopie", 2, {_alpha:60, _x:130, _y:250,
➄_rotation:15});

20
150 scripts Livre Page 21 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

‱

Gestion des lignes d’instructions
contenues dans une boucle for()

‱

Pourquoi est-il nĂ©cessaire d’apporter un complĂ©ment d’informations sur les boucles que
vous connaissez sĂ»rement ? L’ActionScript vous propose de dĂ©ïŹnir les scripts associĂ©s Ă 
une occurrence créée dynamiquement, mais cela peut poser un problÚme. Prenons
l’exemple suivant :
for (i=0; i<=10; i++) {
_root.attachMovie("photo", "photo"+i, i);
_root["photo"+i]._x = 30+i*50;
_root["photo"+i]._y = 50;
_root["photo"+i].onPress = function() {
nomDeLaPhoto = this._name;
};
}

Si vous lancez une animation contenant ce script, toutes les lignes d’instructions ci-dessus
ont Ă©tĂ© exĂ©cutĂ©es Ă  l’exception de celle qui se trouve dans le gestionnaire onPress.
Cette ligne ne va s’exĂ©cuter qu’au moment oĂč l’utilisateur cliquera sur une photo.
nomDeLaPhoto = this._name

Dans le texte dynamique qui se trouve sur la scĂšne, celui dont le nom de variable est
nomDeLaPhoto, le nom de l’occurrence sur laquelle l’utilisateur va cliquer va s’inscrire.
this._name est une information relative Ă  l’occurrence, celle qui contient cette ligne d’instruction. Cette occurrence prĂ©cisĂ©ment. Rappelons que « celle » ou « cette » se traduisent
notamment en anglais par « this ».

Le mot-clĂ© this fait donc rĂ©fĂ©rence au nom de l’instance qui se trouve devant le gestionnaire dans lequel il se trouve.
_root["photo"+i].onPress = function() {
nomDeLaPhoto = this._alpha-=5;
};

Le script ci-dessus signiïŹe qu’à chaque clic sur l’occurrence Ă  laquelle est rattachĂ©e ce
script (pa exemple, photo3 si i vaut 3), cette mĂȘme occurrence va devenir de plus en plus
transparente.
Figure I-3
Le mot-clé this fait bien référence au
nom de l'occurrence qui se trouve
devant le gestionnaire d'événement.

21
150 scripts Livre Page 22 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

Maintenant, essayons de comprendre pourquoi le script suivant renvoie toujours la
mĂȘme valeur et notamment souvent une erreur.
photosDeClasse = ["Marine", "Marjorie", "David", "Pat", "Sandy", "Manon"];
for (i=0; i<6; i++) {
_root.attachMovie("photo", "photo"+i, i);
_root["photo"+i]._x = 30+i*50;
_root["photo"+i]._y = 50;
_root["photo"+i].onPress = function() {
nomDeLaPhoto = photosDeClasse[i];
};
}

La premiĂšre question que nous vous poserons est : en combien de millisecondes s’exĂ©cute
cette boucle ?
La rĂ©ponse est simple, mais surtout logique : moins d’une fraction de seconde, car c’est ce
qui caractĂ©rise le principe des boucles for() et while(). Ajoutons et prĂ©cisons qu’à la ïŹn
de l’exĂ©cution de la boucle, i vaut 6. Vous n’allez pouvoir cliquer sur une occurrence qu’à
la ïŹn de la boucle qui sera de toutes les façons plus rapide que vous. Au moment oĂč vous
cliquerez sur une occurrence, i vaudra donc déjà 6 !
La ligne d’instruction suivante s’était exĂ©cutĂ©e au moment de la boucle.
_root["photo"+i].onPress = function() {

À ce moment-lĂ , i valait une valeur trĂšs prĂ©cise. Imaginons qu’il s’agissait de 3, dans ce
cas, lorsque vous cliquez sur l’occurrence intitulĂ©e photo3, la ligne d’instruction contenue dans son gestionnaire s’exĂ©cute. Souvenez-vous qu’au moment oĂč vous allez cliquer sur une des photos, i vaut 6. Alors que peut vous renvoyer la ligne d’instruction
suivante ?
nomDeLaPhoto = photosDeClasse[6];

Une erreur ! En effet, l’entrĂ©e numĂ©ro 6 n’existe pas. La premiĂšre entrĂ©e du tableau porte
le numĂ©ro d’index 0 et la derniĂšre le numĂ©ro 5.
Attention, le problĂšme n’est pas celui de l’entrĂ©e qui n’existe pas. Nous pourrions avoir
dix entrĂ©es dans notre tableau, alors un clic sur toutes les photos renverrait tout de mĂȘme
la valeur de la sixiÚme entrée du tableau. Dans ce cas, comment faire pour obtenir la troisiÚme entrée du tableau au moment du clic sur la photo intitulée photo3 ?
Pour commencer, n’oubliez pas que la premiĂšre entrĂ©e d’un tableau porte l’index 0. Donc
nous n’allons pas cliquer sur l’occurrence photo3 pour obtenir la troisiĂšme entrĂ©e du
tableau, mais sur l’occurrence photo2. Comme il existe une occurrence intitulĂ©e photo0,
photo2 est bien la troisiÚme occurrence. Ce problÚme de décalage ne surviendra que dans
les cas oĂč vous travaillerez avec des tableaux. Reprenons, il ne s’agissait que d’un dĂ©tail
minime par rapport Ă  notre problĂšme majeur.
photosDeClasse = ["Marine", "Marjorie", "David", "Pat", "Sandy", "Manon"];
for (i=0; i<6; i++) {
_root.attachMovie("photo", "photo"+i, i);

22
150 scripts Livre Page 23 Lundi, 20. ao t 2007 7:29 07

Se prĂ©parer Ă  la lecture de l’ouvrage
Introduction

_root["photo"+i]._x = 30+i*50;
_root["photo"+i]._y = 50;
_root["photo"+i].sonNumero = i;
_root["photo"+i].onPress = function() {
nomDeLaPhoto = photosDeClasse[this.sonNumero];
};
}

Rappelons que dans le script ci-dessus, toutes les lignes d’instructions s’exĂ©cutent au
moment de la boucle à l’exception de la ligne qui est contenue dans le gestionnaire
onPress. Si vous avez bien observé, nous avons ajouté une nouvelle ligne :
_root["photo"+i].sonNumero = i;

Au moment de la boucle, nous avons associé à chaque occurrence, une variable intitulée
sonNumero qui a pris pour valeur celle de i, donc différente et propre à chaque occurrence.
L’occurrence intitulĂ©e photo4 contient une variable intitulĂ©e sonNumero qui vaut 4. Ne
peut-on donc pas dire que la variable qui vaut 2, c’est celle de l’occurrence qui s’appelle
photo2 ? Si nous pouvions traduire celle par this et réciproquement, voilà ce que nous
obtiendrions dans notre script.
photo4.onPress = function() {
nomDeLaPhoto = photosDeClasse[this.sonNumero];
};

ou aussi
photo4.onPress = function() {
nomDeLaPhoto = photosDeClasse[cette occurrence sur laquelle je clique.sonNumero];
};

Vous l’aurez compris, dĂšs que vous dĂ©ïŹnissez un gestionnaire onPress dans une boucle
for(), vous ne pouvez pas faire référence à la variable locale (i dans notre exemple), car
elle renvoie toujours la mĂȘme valeur. Vous devez donc associer une variable Ă  chaque
occurrence.
Astuce
Une technique consiste Ă  rĂ©cupĂ©rer le numĂ©ro ïŹgurant dans le nom pour l’utiliser comme
valeur. L’exemple suivant vous en fait la dĂ©monstration.

photo4.onPress = function() {
numero = this._name.substr(5, 1);
trace(numero);
};

23
150 scripts Livre Page 24 Lundi, 20. ao t 2007 7:29 07

150 scripts pour Flash CS3

‱
‱

Le sens du mot-clé this
selon les contextes
Si vous avez lu les trois explications précédentes de ce chapitre, nous avons évoqué le sens
de ce mot-clé, vous en savez donc sûrement un peu plus. Mais selon sa position dans un
script, que signiïŹe ce mot-clĂ© ? Partons de l’exemple suivant :
this._rotation = 180 ;

‱ Cette ligne d’instruction se trouve sur la premiĂšre image-clĂ© de la timeline principale
de votre animation. Lorsque vous tenterez de lire cette derniĂšre dans la page d’un navigateur ou dans un projecteur, toute la scĂšne s’afïŹchera Ă  l’envers, une rotation de 180˚
ayant Ă©tĂ© appliquĂ©e avant l’afïŹchage des Ă©lĂ©ments qui la composent.
‱ À prĂ©sent, imaginons qu’elle se trouve sur la premiĂšre image-clĂ© de la timeline d’une
animation (un ïŹchier SWF) que vous chargez par le biais de la commande loadMovieNum().
La scùne de votre animation principale ne va pas bouger ; en revanche, l’animation
chargĂ©e va s’afïŹcher Ă  l’envers (retournĂ©e de 180˚).
‱ Pour ïŹnir, imaginons qu’elle se trouve sur la premiĂšre image-clĂ© de la timeline d’un
clip. Lorsque vous placerez ce clip sur la scùne, l’occurrence issue de ce symbole
s’afïŹchera sur la scĂšne retournĂ©e Ă  180˚.
Prenons d’autres exemples

personnage.onPress = function() {
this._rotation += 5;
};

this fait rĂ©fĂ©rence au nom de l’occurrence qui se trouve devant le gestionnaire, c’est-Ă dire personnage.
decor.onEnterFrame = function() {
this._x += 5;
};

this fait rĂ©fĂ©rence au nom de l’occurrence qui se trouve devant le gestionnaire, c’est-Ă -dire
decor.
_root._alpha = 0;
_root.onEnterFrame = function() {
this._alpha += 3;
if (this._alpha>=100) {
delete this.onEnterFrame;
}
};

Rappelons que _root fait rĂ©fĂ©rence Ă  la scĂšne. Ainsi, la premiĂšre ligne d’instruction va
plonger la scĂšne dans le noir (si la scĂšne est noire). Ce script a donc pour effet de rendre
la scÚne transparente, puis elle le devient de moins en moins. Lorsque son opacité dépasse
les 100 %, le gestionnaire est tout simplement détruit.
24
150 scripts Livre Page 25 Lundi, 20. ao t 2007 7:29 07

Partie I

L’interface
C’est le quotidien de la plupart des ïŹ‚ashers et dĂ©veloppeurs Flash. CrĂ©er
un menu, le programmer pour qu’il se dĂ©roule, dĂ©placer une occurrence
par drag & drop (ou glisser-déposer, en français), réaliser un panier,
construire dynamiquement un Ă©cran, ce sont autant de tĂąches que vous
pourriez ĂȘtre conduits Ă  mener pour un dĂ©veloppement. Ce chapitre met
donc l’accent sur les techniques suivantes :
‱ l’optimisation d’une animation ;
‱ la crĂ©ation de menus et boutons ;
‱ la rĂ©alisation de variateurs ;
‱ la gestion d’un panier et des formulaires ;
‱ la gestion des effets de scrolls (menus et listes dĂ©roulants), des panoramiques et transitions ;
‱ la construction dynamique de l’interface ;
‱ le contrĂŽle du temps et de son afïŹchage ;
‱ le dĂ©placement de personnages et d’objets sur la scĂšne ;
‱ l’enregistrement de donnĂ©es dans des cookies et bases de donnĂ©es ;
‱ l’obtention d’informations relatives à la scùne.
Ces techniques sont toutes aussi importantes les unes que les autres,
mais nous devons tout de mĂȘme mettre en avant le fait qu’il est primordial d’ĂȘtre capable de gĂ©rer du XML dans une animation Flash. C’est
pourquoi nous avons trÚs souvent utilisé cette technologie dans nos
Ă©tudes de cas. Par ailleurs, la construction d’une interface doit vraiment
se faire dynamiquement. Il est une rùgle qu’il faut essayer de pousser au
maximum de vos limites, placez et créez tout dynamiquement sur la
scĂšne, Ă©vitez de dĂ©poser vous-mĂȘme un symbole sur la zone de travail (il
serait d’ailleurs impossible de le supprimer). Avant de vous lancer dans
la lecture de ce livre, assurez-vous que vous comprenez bien les points
abordés dans le chapitre précédent.
150 scripts Livre Page 26 Lundi, 20. ao t 2007 7:29 07
150 scripts Livre Page 27 Lundi, 20. ao t 2007 7:29 07

1
Optimisation d’une animation

Il est trÚs facile de réaliser une animation, avec ou sans interpolation, contenant éventuellement du code, car des centaines de sites sur Internet vous proposent des tutoriaux pour
vous aider Ă  faire vos premiers pas en Flash puis en ActionScript. Allez-vous respecter
toutes les rĂšgles Ă©lĂ©mentaires qui ïŹgurent gĂ©nĂ©ralement dans les notes et autres remarques de l’aide ofïŹcielle de Macromedia Flash ? Sans avoir la prĂ©tention d’ĂȘtre exhaustif,
nous allons mettre en avant certaines techniques qui vous permettront d’obtenir des animations/scripts optimisĂ©s, c’est-Ă -dire rapides Ă  l’exĂ©cution, pas trop lourds, faciles Ă 
mettre Ă  jour, et respectant certaines conventions propres Ă  la programmation.

Techniques d’optimisation d’une production
en Flash
Nous n’allons pas commencer par vous prĂ©senter une animation « optimisĂ©e », ni nous
arrĂȘter sur des conseils relatifs Ă  la programmation en ActionScript, mais plutĂŽt vous
Ă©numĂ©rer des rĂšgles qu’il est fortement conseillĂ© de suivre si vous voulez optimiser votre
productivitĂ©, votre code et l’exĂ©cution de vos animations.

Prise en main du logiciel
‱ DĂšs le dĂ©but de la crĂ©ation d’une animation, rĂ©glez sa cadence, c’est-Ă -dire la
vitesse de dĂ©ïŹlement de la tĂȘte de lecture. Dans le menu ModiïŹcation>Document
, rĂ©glez le chiffre ïŹgurant Ă  droite de l’étiquette Cadence Ă  20 au minimum.
150 scripts Livre Page 28 Lundi, 20. ao t 2007 7:29 07

L’interface
Partie I

Nous vous conseillons de pousser cette valeur Ă  30. RĂ©glez Ă©galement la largeur, la hauteur et la couleur de la scĂšne. Cette derniĂšre pourra toujours ĂȘtre changĂ©e, mais il est
dĂ©conseillĂ© de changer les dimensions d’une animation en cours de dĂ©veloppement.
‱ Puisque vous ĂȘtes dans cette fenĂȘtre PropriĂ©tĂ©s du document, proïŹtez-en pour rĂ©gler la
cadence, la largeur, la hauteur et la couleur de la scĂšne de vos prochaines animations de
façon dĂ©ïŹnitive. Cliquez simplement sur le bouton « Établir comme valeur par
défaut ».
‱ Enregistrez votre animation avant mĂȘme de travailler dessus car dans certains cas, elle
devra possĂ©der une identitĂ©, c’est-Ă -dire ĂȘtre physiquement prĂ©sente sur le disque dur
de votre ordinateur sous forme de ïŹchier.
‱ DĂšs le premier lancement de Flash, conïŹgurez la disposition des palettes sur votre
Ă©cran aïŹn de ne pas avoir Ă  les bouger continuellement, ce qui ralentirait votre productivitĂ©. Enregistrez alors cette disposition via le menu FenĂȘtre>Enregistrer la disposition
des panneaux

‱ Ayez le rĂ©ïŹ‚exe d’utiliser les raccourcis prĂ©sentĂ©s ci-dessous. Il en existe de nombreux
autres, c’est un minimum Ă  s’imposer pour optimiser sa productivitĂ©.
Tableau 1-1 Raccourcis clavier Ă  connaĂźtre
Raccourci

RĂ©sultat

F6
F7

Créer une image-clé vide.

F5

Ajouter des images. Si la tĂȘte de lecture se trouve avant la derniĂšre
image d’un calque, le raccourci insùre des images aprùs l’image
sélectionnée. Dans le cas contraire, des images sont ajoutées entre
la ïŹn du calque et l’image sĂ©lectionnĂ©e.

F8

Transformer une sélection en un Symbole.

F9

AfïŹcher/Masquer la palette Action.

La lettre V seule

SĂ©lectionner l’outil FlĂšche noire (Outil SĂ©lection).

Les lettres R et O

SĂ©lectionner respectivement les outils Rectangle et Ovale.

Ctrl + B
Commande-B (Mac)

Pour « casser » une occurrence et récupérer son contenu. Dans le
cas d’un texte, vous obtenez des lettres sĂ©parĂ©es. Une nouvelle
exécution du raccourci transforme chaque lettre en forme vectorielle.

Ctrl + Entrée
Commande-Entrée (Mac)

Permet de lire l’animation en plein Ă©cran (tout du moins sans les
palettes).

Ctrl + Shift + Entrée
Commande + Shift + Entrée (Mac)

Lancer l’animation en mode dĂ©bogage.

Ctrl + K et Ctrl + I
Commande + K et Commande + I (Mac)

28

Créer une image-clé reprenant le contenu de la précédente sur le
mĂȘme calque.

AfïŹcher respectivement les palettes Aligner et Info.
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2
150 scripts pour flash as2

More Related Content

Viewers also liked

ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·
ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·
ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·messaoudi mohamed
 
Ű§Ù„Ű±ŰłÙ…
Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ű±ŰłÙ…
Ű§Ù„Ű±ŰłÙ… mish99
 
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copy
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copyŰ§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copy
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copyelsayedelsman
 
Sections Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…
Sections   Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…Sections   Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…
Sections Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…ŰŁŰ­Ù…ŰŻ ŰŻŰčۚ۳
 
présentation de soutenance PFE
présentation de soutenance PFEprésentation de soutenance PFE
présentation de soutenance PFEKarim Labidi
 
4° medio desafio x 3
4° medio desafio x 34° medio desafio x 3
4° medio desafio x 3Jose Avendaño
 
Gifs infos argos 26
Gifs   infos argos 26Gifs   infos argos 26
Gifs infos argos 26yves99
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsSalainversion
 
Il est né le divin enfant
Il est né le divin enfantIl est né le divin enfant
Il est né le divin enfantilladearousa
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsSalainversion
 
Nike Shox Nz Femme BT9411
Nike Shox Nz Femme BT9411Nike Shox Nz Femme BT9411
Nike Shox Nz Femme BT9411subsequentfurvo52
 
Offres d’emploi sur internet
Offres d’emploi sur internetOffres d’emploi sur internet
Offres d’emploi sur internetAlexL79
 
CC Namur ordre du jour
CC Namur ordre du jourCC Namur ordre du jour
CC Namur ordre du jourbenjaave
 
Regards sur l'Afrique
Regards sur l'AfriqueRegards sur l'Afrique
Regards sur l'Afriquemlaugel
 
Offre de service
Offre de serviceOffre de service
Offre de servicerabah yahiaoui
 
Authentica for wine fr
Authentica for wine frAuthentica for wine fr
Authentica for wine frScratch&Screen
 
Lesson template
Lesson templateLesson template
Lesson templateaneesh a
 
Presentation datalocale generaliste
Presentation datalocale generalistePresentation datalocale generaliste
Presentation datalocale generalisteressourcerie_datalocale
 

Viewers also liked (20)

Welding time (rotoweld)
Welding time (rotoweld) Welding time (rotoweld)
Welding time (rotoweld)
 
ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·
ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·
ŰŁÙ†ŰŽŰ·Ű© Ű§Ù„Ù‚Ű·Ű§Űč Ű§Ù„ŰšŰłÙŠŰ·
 
Ű§Ù„Ű±ŰłÙ…
Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ű±ŰłÙ…
Ű§Ù„Ű±ŰłÙ…
 
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copy
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copyŰ§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copy
Ű§Ù„ŰȘÙ…Ű§Ű±ÙŠÙ† Ű§Ù„Ù…Ű­Ù„ÙˆÙ„Ű© لكŰȘۧۚ Ű§Ù„Ű±ŰłÙ… Ű§Ù„Ù‡Ù†ŰŻŰłÙŠ 1 - copy
 
Sections Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…
Sections   Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…Sections   Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…
Sections Ű§Ù„Ù‚Ű·Ű§ŰčۧŰȘ - Ű„ŰłÙ‚Ű§Ű· Ù‚Ű·Ű§ŰčۧŰȘ Ű§Ù„ŰŁŰŹŰłŰ§Ù…
 
présentation de soutenance PFE
présentation de soutenance PFEprésentation de soutenance PFE
présentation de soutenance PFE
 
4° medio desafio x 3
4° medio desafio x 34° medio desafio x 3
4° medio desafio x 3
 
Gifs infos argos 26
Gifs   infos argos 26Gifs   infos argos 26
Gifs infos argos 26
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal Consors
 
Il est né le divin enfant
Il est né le divin enfantIl est né le divin enfant
Il est né le divin enfant
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal Consors
 
Nike Shox Nz Femme BT9411
Nike Shox Nz Femme BT9411Nike Shox Nz Femme BT9411
Nike Shox Nz Femme BT9411
 
Offres d’emploi sur internet
Offres d’emploi sur internetOffres d’emploi sur internet
Offres d’emploi sur internet
 
CC Namur ordre du jour
CC Namur ordre du jourCC Namur ordre du jour
CC Namur ordre du jour
 
Publicidadinternet
PublicidadinternetPublicidadinternet
Publicidadinternet
 
Regards sur l'Afrique
Regards sur l'AfriqueRegards sur l'Afrique
Regards sur l'Afrique
 
Offre de service
Offre de serviceOffre de service
Offre de service
 
Authentica for wine fr
Authentica for wine frAuthentica for wine fr
Authentica for wine fr
 
Lesson template
Lesson templateLesson template
Lesson template
 
Presentation datalocale generaliste
Presentation datalocale generalistePresentation datalocale generaliste
Presentation datalocale generaliste
 

Similar to 150 scripts pour flash as2

Design patterns
Design patternsDesign patterns
Design patternsCocoaHeads.fr
 
Design patterns
Design patternsDesign patterns
Design patternsCocoaHeads.fr
 
A Qui Sadresse Louvrage
A Qui Sadresse LouvrageA Qui Sadresse Louvrage
A Qui Sadresse Louvrageguesta01510d
 
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...JUSTINDAVONDAMBAT
 
Microsoft Project Support de cours
Microsoft Project Support de coursMicrosoft Project Support de cours
Microsoft Project Support de cours📡 Vincent Isoz
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformepprem
 
Logiciels 3d-112-ktcufc
Logiciels 3d-112-ktcufcLogiciels 3d-112-ktcufc
Logiciels 3d-112-ktcufcThierry Delarue
 
Responsible Design ou Le web moderne Ă  destination de tous
Responsible Design ou Le web moderne Ă  destination de tousResponsible Design ou Le web moderne Ă  destination de tous
Responsible Design ou Le web moderne Ă  destination de tousjwajsberg
 
Jabes 2007 - Atelier 5, CR atelier ergonomie
Jabes 2007 - Atelier 5, CR atelier ergonomieJabes 2007 - Atelier 5, CR atelier ergonomie
Jabes 2007 - Atelier 5, CR atelier ergonomieABES
 
Extrait chap1
Extrait chap1Extrait chap1
Extrait chap1mvaudano
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...ATPENSC-Group
 
Actionscript: du web au mobile
Actionscript: du web au mobileActionscript: du web au mobile
Actionscript: du web au mobileMartin Arvisais
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisantcluelessjoe
 
Reprenez le controle de linux (2010)
Reprenez le controle de linux (2010)Reprenez le controle de linux (2010)
Reprenez le controle de linux (2010)Théodore KOFFI
 
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sens
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sensProgrammer pour les nuls afin de maĂźtriser la programmation dans tout son sens
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sensJean-philippe Denou
 
Js cours
 Js cours Js cours
Js coursyarsenv47
 
Gestion deprojets textile produit
Gestion deprojets textile produitGestion deprojets textile produit
Gestion deprojets textile produitmoutaouakilamine
 

Similar to 150 scripts pour flash as2 (20)

Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
A Qui Sadresse Louvrage
A Qui Sadresse LouvrageA Qui Sadresse Louvrage
A Qui Sadresse Louvrage
 
titre
titretitre
titre
 
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...
Sinitier_a_la_programmation_et_a_loriente_objet__avec_des_exemples_en_C_C_C_J...
 
Microsoft Project Support de cours
Microsoft Project Support de coursMicrosoft Project Support de cours
Microsoft Project Support de cours
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateforme
 
Logiciels 3d-112-ktcufc
Logiciels 3d-112-ktcufcLogiciels 3d-112-ktcufc
Logiciels 3d-112-ktcufc
 
Responsible Design ou Le web moderne Ă  destination de tous
Responsible Design ou Le web moderne Ă  destination de tousResponsible Design ou Le web moderne Ă  destination de tous
Responsible Design ou Le web moderne Ă  destination de tous
 
Jabes 2007 - Atelier 5, CR atelier ergonomie
Jabes 2007 - Atelier 5, CR atelier ergonomieJabes 2007 - Atelier 5, CR atelier ergonomie
Jabes 2007 - Atelier 5, CR atelier ergonomie
 
Extrait chap1
Extrait chap1Extrait chap1
Extrait chap1
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
 
Actionscript: du web au mobile
Actionscript: du web au mobileActionscript: du web au mobile
Actionscript: du web au mobile
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Reprenez le controle de linux (2010)
Reprenez le controle de linux (2010)Reprenez le controle de linux (2010)
Reprenez le controle de linux (2010)
 
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sens
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sensProgrammer pour les nuls afin de maĂźtriser la programmation dans tout son sens
Programmer pour les nuls afin de maĂźtriser la programmation dans tout son sens
 
Js cours
 Js cours Js cours
Js cours
 
Gestion deprojets textile produit
Gestion deprojets textile produitGestion deprojets textile produit
Gestion deprojets textile produit
 

More from messaoudi mohamed

ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdf
ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdfŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdf
ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdfmessaoudi mohamed
 
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űł
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†ŰłŰ§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űł
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űłmessaoudi mohamed
 
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdf
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdfSynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdf
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdfmessaoudi mohamed
 
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ messaoudi mohamed
 
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±Ű§ŰłŰ±Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±messaoudi mohamed
 
Présentation effective 1.3
Présentation effective 1.3Présentation effective 1.3
Présentation effective 1.3messaoudi mohamed
 

More from messaoudi mohamed (7)

ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdf
ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdfŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdf
ŰȘŰ·ŰšÙŠÙ‚Ű§ŰȘ Ű§Ù„Ű§ŰłÙ‚Ű§Ű· Ű§Ù„Ù…ŰȘŰčŰ§Ù…ŰŻ 8.pdf
 
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űł
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†ŰłŰ§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űł
Ű§Ù„Ù…Ű±ŰŹŰč للŰȘŰ±ŰšÙŠŰ© ŰšŰȘÙˆÙ†Űł
 
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdf
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdfSynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdf
SynthĂšse et mise en oeuvre d’une carte d’interface pour codeur incrĂ©mental.pdf
 
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ
Ű§Ù„ŰȘŰ±Ù‚ÙŠÙ… ÙˆŰ«ÙŠÙ‚Ű© 9 Ű§ŰłŰ§ŰłÙŠ
 
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±Ű§ŰłŰ±Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±
ۧ۳۱Űč Ű·Ű±ÙŠÙ‚Ű© Ù„Ű§Ű­ŰȘŰ±Ű§Ù ŰšŰ±Ù…ŰŹŰ© Ű§Ù„Ù…Ű§ÙŠÙƒŰ±ÙˆÙƒÙ†ŰȘŰ±ÙˆÙ„Ű±
 
Présentation effective 1.3
Présentation effective 1.3Présentation effective 1.3
Présentation effective 1.3
 
Guide du formateur
Guide du formateur Guide du formateur
Guide du formateur
 

Recently uploaded

Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdf
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdfCours PrĂ©paration Ă  l’ISO 27001 version 2022.pdf
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdfssuserc72852
 
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 

Recently uploaded (13)

Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
EvaluaciĂłn Alumnos de Ecole Victor Hugo
EvaluaciĂłn Alumnos de Ecole  Victor HugoEvaluaciĂłn Alumnos de Ecole  Victor Hugo
EvaluaciĂłn Alumnos de Ecole Victor Hugo
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdf
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdfCours PrĂ©paration Ă  l’ISO 27001 version 2022.pdf
Cours PrĂ©paration Ă  l’ISO 27001 version 2022.pdf
 
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN Dáș Y THÊM (KáșŸ HOáș CH BÀI Dáș Y BUỔI 2) - TIáșŸNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 

150 scripts pour flash as2

  • 3. Chez le mĂȘme Ă©diteur D. Tardiveau. – La vidĂ©o dans Flash. N°12048, 2007, 190 pages. A. Tasso. – Apprendre Ă  programmer en ActionScript 3 – Avec 60 exercices corrigĂ©s. N°12199, 500 pages. À paraĂźtre. W. Siracusa. – Faites vos jeux avec Flash ! – Du Pacman au Sudoku. N°11993, 2006, 220 pages. M. Lavant. – Flash 8 Professional. N°11950, 2006, 678 pages. C. BergĂ©. – Je crĂ©e mon site Internet avec Dreamweaver 8 et Flash 8. N°11977, 2006, 144 pages + CD-Rom vidĂ©o. J.-M. Defrance. – PHP/MySQL avec Flash 8. N°11971, 2006, 782 pages. J.-M. Defrance. – PHP/MySQL avec Flash MX 2004. N°11468, 2005, 710 pages. M. Capraro et al. – Flash MX 2004 Magic. N°11513, 2004, 164 pages. G. Guine, A. Moraes. – Flash MX – Jeu en rĂ©seau avec Action Script et XML. N°11068, 2002, 170 pages. K. Goto, E. Cotler. – Redesign web 2.0. N°11579, 2005, 294 pages. R. Goetter, S. Blondeel. – CSS2 – Pratique du design web. N°11570, 2005, 324 pages. J. Zeldman. – Design web : utiliser les standards – CSS et XHTML. N°11548, 2005, 414 pages. G. Gueneau. – Conduite de projets en crĂ©ation numĂ©rique. N°11474, 2005, 300 pages.
  • 5. ÉDITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com Le code de la propriĂ©tĂ© intellectuelle du 1er juillet 1992 interdit en effet expressĂ©ment la photocopie Ă  usage collectif sans autorisation des ayants droit. Or, cette pratique s’est gĂ©nĂ©ralisĂ©e notamment dans les Ă©tablissements d’enseignement, provoquant une baisse brutale des achats de livres, au point que la possibilitĂ© mĂȘme pour les auteurs de crĂ©er des Ɠuvres nouvelles et de les faire Ă©diter correctement est aujourd’hui menacĂ©e. En application de la loi du 11 mars 1957, il est interdit de reproduire intĂ©gralement ou partiellement le prĂ©sent ouvrage, sur quelque support que ce soit, sans autorisation de l’éditeur ou du Centre Français d’Exploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. © Groupe Eyrolles, 2007, ISBN : 978-2-212-12112-4
  • 6. o t 2007 7:29 07 Remerciements Merci Ă  Fanny pour ces moments passĂ©s sur MSN Ă  tester certaines animations et pour la relecture de quelques passages du livre. Merci Ă  Melux pour ses relectures. EnïŹn, merci Ă  Marine et Marjorie qui ont vu mon dos et mon tĂȘte-Ă -tĂȘte avec l’écran de l’ordinateur pendant quatre mois
 Promis, j’attends deux mois avant d’écrire le prochain livre !
  • 7. 0. ao t 2007 7:29 07
  • 8. ao t 2007 7:29 07 Avant-propos Pourquoi un tel ouvrage ? Lorsque vous rencontrez un problĂšme en ActionScript, vous disposez de diffĂ©rentes sources d’information pour vous aider : en particulier, les forums vous permettent d’interroger la communautĂ© des ïŹ‚asheurs. Prenez-vous le temps d’y rechercher si un post ne correspond pas Ă  la question que vous vous apprĂȘtez Ă  dĂ©poser ? En parcourant les sujets des principaux forums, on peut en effet constater que les questions sont nombreuses et prĂ©cises. Vous pouvez Ă©galement dĂ©cider d’approfondir vos connaissances en ActionScript, gĂ©nĂ©ralement de maniĂšre acadĂ©mique ou par autoformation. Dans les deux cas, l’analyse d’exercices et de cas existants constitue alors un axe majeur de l’acquisition des bases. EnïŹn, si vous n’avez ni le courage ni le temps de rechercher la solution d’un problĂšme dans un forum ou d’apprendre par vous-mĂȘme, il vous reste toujours la possibilitĂ© d’interroger des spĂ©cialistes. Mais en production d’animations Flash, si les problĂšmes et besoins de dĂ©veloppement sont rĂ©currents, il n’existe pas cependant une seule solution de dĂ©ploiement pour dĂ©velopper une partie d’un programme. C’est en partant de ces diffĂ©rents constats qu’est nĂ©e l’idĂ©e d’écrire un ouvrage rĂ©fĂ©rençant les techniques les plus frĂ©quemment rencontrĂ©es en production. En tant qu’enseignant, je constate que les difïŹcultĂ©s d’apprentissage reposent toujours sur les mĂȘmes problĂšmes : explications trop prĂ©cises lors d’une premiĂšre approche (souvent dans un souci d’exhaustivitĂ©), trop techniques et de ce fait trop abstraites. C’est pourquoi l’approche pĂ©dagogique utilisĂ©e dans ce livre s’appuie sur des techniques d’enseignement qui ont fait leurs preuves. Certains scripts seront parfois moins optimisĂ©s qu’ils pourraient ou devraient l’ĂȘtre, mais ce sera dans un souci d’accessibilitĂ© Ă  un large public. Nous ne sommes pas lĂ  pour critiquer les ressources mises Ă  disposition des ïŹ‚asheurs sur Internet, mais il faut reconnaĂźtre que la majeure partie des sites proposant des tutoriaux sont rarement pertinents. Bien souvent, les webmasters (et/ou rĂ©dacteurs, auteurs
  • 9. ao t 2007 7:29 07 150 scripts pour Flash CS3 d’articles) ne se mettent ni Ă  la place ni au niveau des apprenants. Certes, toutes ces ressources ne s’adressent pas uniquement aux dĂ©butants, mais un certain nombre d’entre elles manquent leur cible en raison de leur degrĂ© d’abstraction. D’autant qu’un apprentissage s’effectuant par paliers, on peut ĂȘtre novice Ă  plusieurs niveaux. Un expert ne devrait jamais oublier que ce qui lui paraĂźt Ă©vident ne l’est pas pour tout le monde. Nous garderons donc Ă  l’esprit ces directives tout au long de nos analyses. CompatibilitĂ© des scripts de ce livre Chaque animation est introduite par un texte justiïŹant l’intĂ©rĂȘt de sa prĂ©sence dans ce livre, tandis que le ïŹchier .ïŹ‚a correspondant sera disponible en ligne. Pour exploiter un script de l’ouvrage, il vous sufïŹra d’ouvrir le ïŹchier d’extension .ïŹ‚a, sans aucune manipulation supplĂ©mentaire. En revanche, si vous souhaitez utiliser un script du livre dans un nouveau document Flash CS3, il faudra que ce document soit de type ActionScript 2 pour que le script soit compatible. Remarque Pour dĂ©velopper en ActionScript 1 ou 2 Ă  partir de Flash CS3, vous devez sĂ©lectionner Fichier Flash (ActionScript 2.0) lors de la crĂ©ation d’un nouveau document. Les diffĂ©rents niveaux de dĂ©veloppement en ActionScript Quelle est la crĂ©dibilitĂ© de l’auteur face aux propos qui vont suivre ? En tant qu’enseignant qui dispense des cours en ActionScript 2 et ActionScript 3, et auteur d’ouvrages traitant des deux versions du langage, j’ai conscience des diffĂ©rences de niveaux qui existent entre les individus en matiĂšre de programmation. Il est donc inutile d’essayer d’enseigner l’ActionScript 3 Ă  ceux qui auront plus de facilitĂ©s Ă  apprendre l’ActionScript 1 ou 2. L’ouvrage que vous avez entre les mains est sorti aprĂšs la version CS3 de Flash. Vous pourriez en toute lĂ©gitimitĂ© vous demander si les scripts de ce livre sont compatibles avec cette nouvelle version et quel est le public visĂ©. Rassurez-vous, si l’auteur et les Ă©ditions Eyrolles ont dĂ©cidĂ© d’éditer une nouvelle version de cet ouvrage, c’est parce que Flash CS3 utilise l’ActionScript 1 et 2, et l’ActionScript 3. Dans ce cas, oĂč sont les diffĂ©rences ? VIII
  • 10. 07 7:29 07 Avant-propos ActionScript 1 et 2 Aujourd’hui, face Ă  l’ActionScript 3, peut-on afïŹrmer que l’ActionScript 1 et l’ActionScript 2 sont des langages obsolĂštes qu’Adobe conserve dans un souci de compatibilitĂ© ou sont-ils encore fonctionnels et utiles ? Il est intĂ©ressant de rĂ©pondre Ă  cette question par une sĂ©rie d’autres interrogations : ‱ Est-il nĂ©cessaire de faire appel Ă  un architecte et/ou un menuisier pour fabriquer soimĂȘme une Ă©tagĂšre ? ‱ Est-il nĂ©cessaire de faire appel Ă  un maquettiste et un imprimeur pour rĂ©aliser un fairepart de naissance, etc. ? ‱ Est-il nĂ©cessaire de faire appel Ă  un Ă©lectricien pour installer un rĂ©seau Ă©lectrique dans une piĂšce ? En fonction de vos compĂ©tences, peut-ĂȘtre pourriez-vous fabriquer vous-mĂȘme cette Ă©tagĂšre et concevoir un faire-part de naissance, mais la mise en place de l’installation Ă©lectrique pourrait ĂȘtre plus difïŹcile. Qu’en est-il de vos compĂ©tences en matiĂšre de programmation ? Êtes-vous un professionnel dans ce domaine ou ressentez-vous un besoin plus ou moins ponctuel en matiĂšre de dĂ©veloppement en ActionScript ? Nous souhaitons ainsi vous montrer que vous ne devez pas avoir de complexes Ă  dĂ©velopper en ActionScript 1 ou 2 plutĂŽt qu’en ActionScript 3, ce dernier nĂ©cessitant de rĂ©elles compĂ©tences en programmation, ainsi qu’une aptitude Ă  apprĂ©hender des notions difïŹciles et souvent abstraites, liĂ©es Ă  la programmation orientĂ©e objet. En tant qu’enseignant depuis prĂšs de quinze ans, j’ai pu constater Ă  quel point chacun d’entre nous est plus ou moins rĂ©ceptif aux informations qui peuvent lui ĂȘtre dĂ©livrĂ©es. Nous possĂ©dons tous des blocages conscients ou inconscients, des facilitĂ©s, des acquis et des lacunes, liĂ©s Ă  notre histoire respective, et c’est pourquoi chacun apprend plus ou moins vite... D’ailleurs, si l’accĂšs au dĂ©veloppement informatique Ă©tait si facile et si Ă©vident, la sociĂ©tĂ© Adobe n’aurait pas dĂ©cidĂ© de conserver trois versions du langage ActionScript. Avant d’aller plus loin, tentons d’expliquer ce qui diffĂšre entre ActionScript 1 et ActionScript 2. Rappelons pour commencer que la version 2 de l’ActionScript est sortie en 2003 avec l’arrivĂ©e de Flash MX 2004. La syntaxe pointĂ©e, apparue en 2002 avec Flash MX, existait alors dĂ©jĂ . Contrairement Ă  ce que beaucoup soutiennent, l’ActionScript 2 ne se caractĂ©rise pas par la syntaxe pointĂ©e. Il est donc inexact d’afïŹrmer que les gestionnaires de type on(press) relĂšvent de l’ActionScript 1 et ceux de type instance.onPress de l’ActionScript 2. Ce qui caractĂ©rise rĂ©ellement l’ActionScript 2, c’est le fait de pouvoir Ă©crire ses propres classes dans des ïŹchiers externes (dont l’extension est .as). Pour ces deux premiĂšres versions du langage, le vocabulaire est ainsi commun Ă  99 %, et c’est dans la façon de dĂ©velopper et d’écrire les scripts qu’il faut distinguer ActionScript 1 et ActionScript 2. Pour ĂȘtre plus prĂ©cis, on parle de programmation orientĂ©e objet en ActionScript 2, alors qu’en ActionScript 1, on parle de programmation structurĂ©e ou sĂ©quentielle. Cet ouvrage est compatible avec ActionScript 1 et ActionScript 2 puisque les lignes d’instructions sont valables pour les deux versions du langage. Alors que IX
  • 11. t 2007 7:29 07 150 scripts pour Flash CS3 l’ActionScript 3 est sorti, si vous avez achetĂ© ce livre, c’est que vous n’aurez sĂ»rement pas besoin de vous lancer dans la programmation orientĂ©e objet. Remarque Adobe ne mentionne que Fichier Flash (ActionScript 2.0) lorsque vous souhaitez crĂ©er un nouveau document car c’est le mĂȘme type de document pour l’ActionScript 1 et l’ActionScript 2. Seule l’approche dans la programmation diffĂšre comme nous l’avons expliquĂ© plus haut. ActionScript 3 Comme nous l’évoquions dans le paragraphe prĂ©cĂ©dent, c’est votre besoin en matiĂšre de dĂ©veloppement qui a motivĂ© votre choix et vous a poussĂ© Ă  acheter ce livre. MĂȘme si en ActionScript 3 il est encore possible de programmer de maniĂšre structurĂ©e, la syntaxe n’en est pas pour autant accessible. Par ailleurs, sachez que le vocabulaire diffĂšre complĂštement entre l’ActionScript 1, 2 et 3. Pour avoir un aperçu de ce dernier et vous rendre compte des diffĂ©rences au travers de nombreux exemples, rendez-vous sur le site www.yazo.net. Bouton ou clip ? Nous utiliserons parfois le terme Bouton pour dĂ©signer une occurrence sur laquelle l’utilisateur peut cliquer. Il s’agira dans 99,9 % des cas d’occurrences de clips. Il est trĂšs important que vous compreniez dĂšs Ă  prĂ©sent que l’utilisation des symboles de type Bouton est gĂ©nĂ©ralement dĂ©conseillĂ©e. Il est en effet impossible de dĂ©ïŹnir une variable dans l’occurrence d’un bouton ou d’utiliser les mĂ©thodes de la classe MovieClip(). Ayez donc le rĂ©ïŹ‚exe de crĂ©er des symboles de type Clip et non de type Bouton pour crĂ©er dynamiquement vos interfaces. Doit-on utiliser les composants ? Si vous dĂ©marrez en ActionScript, la rĂ©ponse Ă  cette question est embarrassante ! Pourquoi programmer ce qui existe dĂ©jĂ , me direz-vous ? Les composants vous Ă©vitent en effet de redĂ©velopper ce qui l’a dĂ©jĂ  Ă©tĂ© par d’autres que vous : menus, textes dĂ©ïŹlants, Ă©lĂ©ments de contrĂŽle de mĂ©dias, calendriers, barres de chargement, etc. Mais lorsque vous apprenez une langue, est-il prĂ©fĂ©rable de retenir des listes d’expressions ou d’apprendre sa grammaire et son vocabulaire ? En fait, il est fortement conseillĂ© d’apprendre d’abord l’ActionScript sans faire appel aux composants, mĂȘme si vous devez redĂ©velopper ce qui l’a dĂ©jĂ  Ă©tĂ©, car votre objectif principal est de maĂźtriser ce langage. Utiliser des morceaux de code que vous ne comprendrez que dans leur contexte ne vous fera pas progresser. Il vous faudra donc connaĂźtre les X
  • 12. 150 scripts Livre Page XI Lundi, 20. ao t 2007 7:29 07 Avant-propos notions Ă©lĂ©mentaires, telles que les techniques de l’algorithme, les gestionnaires, les mĂ©thodes de la classe MovieClip() et les classes intĂ©grĂ©es. En revanche, dĂšs lors que vous aurez compris les grands mĂ©canismes de l’ActionScript et ceux des composants, ne rĂ©inventez pas la roue ! Structure de l’ouvrage Le livre s’articule autour de cinq grandes parties. La premiĂšre partie vous prĂ©sentera des animations dĂ©diĂ©es aux techniques relatives au contrĂŽle des Ă©lĂ©ments composant une interface. Vous dĂ©couvrirez ainsi diffĂ©rents types de menus et boutons, des scripts de contrĂŽle du dĂ©placement d’occurrences sur la scĂšne, des techniques de construction dynamique de l’interface, et bien d’autres encore. La deuxiĂšme partie est consacrĂ©e Ă  la dĂ©couverte des techniques de contrĂŽle des mĂ©dias. Il est conseillĂ© de se rĂ©fĂ©rer dans un premier temps aux explications donnĂ©es en annexe de ce livre si vous ne connaissez pas la technologie Flash Media Server (anciennement Flash Communication Server). La troisiĂšme partie est trĂšs importante car elle vous permettra de comprendre les contraintes de traitement et de mise en page du texte dans une animation. La quatriĂšme partie vous dĂ©montrera que la rĂ©alisation de jeux en Flash ne prĂ©sente pas forcĂ©ment de difïŹcultĂ©s particuliĂšres. Nous avons principalement retenu des jeux pour enfants qui sont utilisĂ©s dans de nombreux sites, ainsi que des jeux plus classiques de tir, de grattage et de machine Ă  sous. En simulant un jeu de dames en rĂ©seau, vous dĂ©couvrirez Ă©galement comment crĂ©er un jeu multijoueur. EnïŹn, la cinquiĂšme partie est dĂ©diĂ©e aux techniques de contrĂŽle de la scĂšne d’une animation. En annexe, vous trouverez des explications et des scripts (entiers ou partiels) rĂ©currents qui vous sont proposĂ©s tout au long de l’ouvrage. Nous avons en effet prĂ©fĂ©rĂ© regrouper les explications communes Ă  plusieurs animations que d’expliquer plusieurs fois le mĂȘme point dans diffĂ©rentes analyses et augmenter ainsi inutilement le volume de ce livre. Structure d’une Ă©tude de cas Comme vous pourrez le constater, la prĂ©sentation d’une animation Ă  l’autre est toujours identique : elle s’appuie sur une structure prĂ©cise qui facilite la comprĂ©hension de l’analyse des scripts. XI
  • 13. 150 scripts Livre Page XII Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 ‱ Titre de l’animation Un petit texte de prĂ©sentation explique l’intĂ©rĂȘt de l’animation et son fonctionnement dans certains cas. Figure 1 LĂ©gende des ïŹgures Rappel Pour certaines animations, nous rappelons une ou plusieurs bases, et nous vous mettons en garde sur les piĂšges Ă  Ă©viter. Description du ïŹchier Indication de la version de Flash Player compatible avec l’animation Chemin d’accĂšs : NomDunDossierPrincipal/NomDunSousDossier/NomDeLanimation.ïŹ‚a Nous vous dĂ©crivons ici la construction de l’interface de l’animation, c’est-Ă -dire les occurrences et textes dynamiques prĂ©sents sur la scĂšne, et indiquons leurs noms. Dans certaines animations, nous Ă©numĂ©rons des procĂ©dures, sous formes de listes numĂ©rotĂ©es. Par exemple : 1. ProcĂ©dure 1. 2. ProcĂ©dure 2. 3. ProcĂ©dure 3. Script Le script vous est ensuite prĂ©senté  var menus = ["Destinations", "Tarifs", "Promotions", "Horaires"]; var destinations = ["Asie", "AmĂ©rique du sud", "AmĂ©rique central", "Etats-Unis", "Europe"]; 
s’en suit l’analyse XII
  • 14. 150 scripts Livre Page XIII Lundi, 20. ao t 2007 7:29 07 Avant-propos Analyse Ligne 1 : dans certains cas, nous analysons ou expliquons le script ligne par ligne. Rappel Quelques petits commentaires ou rappels peuvent venir apporter une aide complĂ©mentaire. Lignes 7 Ă  9 : certaines lignes d’instructions sont analysĂ©es et/ou commentĂ©es globalement. Bogues Ă©ventuels Pour certaines animations, nous vous mettons en garde sur des risques d’erreurs et/ou nous insistons sur l’importance de certaines lignes. TĂ©lĂ©chargement des animations utilisĂ©es dans cet ouvrage Vous pouvez tĂ©lĂ©charger toutes les animations que nous dĂ©crivons dans ce livre Ă  l’adresse suivante : www.editions-eyrolles.com. XIII
  • 15. 150 scripts Livre Page XIV Lundi, 20. ao t 2007 7:29 07
  • 16. 150 scripts Livre Page XV Lundi, 20. ao t 2007 7:29 07 Table des matiĂšres INTRODUCTION Se prĂ©parer Ă  la lecture de l’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Utilisation du XML dans Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 CrĂ©er un document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Charger un document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lire un nƓud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lire un attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Informations complĂ©mentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 6 8 11 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DeuxiĂšme exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 16 InterprĂ©tation du nom d’une occurrence . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Gestion des lignes d’instructions contenues dans une boucle for() . . . 21 Le sens du mot-clĂ© this selon les contextes . . . . . . . . . . . . . . . . . . . . . . . . . . 24 L’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 PARTIE I CHAPITRE 1 Optimisation d’une animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Techniques d’optimisation d’une production en Flash . . . . . . . . . . . . . . 27 Prise en main du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  • 17. 150 scripts Livre Page XVI Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Avant de dĂ©marrer un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Optimisation via l’ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En cours de projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PiĂšges et autres bogues rĂ©currents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 30 32 32 RĂ©aliser un prĂ©chargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 CHAPITRE 2 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Barre de menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Menu dĂ©roulant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Menu animĂ© avec la classe Tween() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Menu dĂ©roulant avec le composant MenuBar . . . . . . . . . . . . . . . . . . . . . . . 48 Menu en accordĂ©on animĂ© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Menu en accordĂ©on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Menu contextuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Ronde de boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Le composant Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Navigation par onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Navigation dynamique par onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Construction dynamique du menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 CHAPITRE 3 Les boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 CrĂ©er un bouton bascule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 DĂ©sactiver un bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 RĂ©aliser un double-clic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 CrĂ©er un bouton avec un effet d’enfoncement . . . . . . . . . . . . . . . . . . . . . . 82 CHAPITRE 4 Les variateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variateur linĂ©aire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Variateur circulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVI 85 89
  • 18. 150 scripts Livre Page XVII Lundi, 20. ao t 2007 7:29 07 Table des matiĂšres Variateur de couleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Variateur de couleur avec la classe geom.ColorTransform . . . . . . . . . . . . 95 CHAPITRE 5 Les paniers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Panier sous forme de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Drag & drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Drag & drop avec gestion de l’inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 CHAPITRE 6 Les Ă©lĂ©ments de formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 RĂ©alisation d’un formulaire avec les composants Flash . . . . . . . . . . . . . . 109 RĂ©alisation d’un QCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 RĂ©alisation d’un QCM avec un ïŹchier XML . . . . . . . . . . . . . . . . . . . . . . . . 117 CHAPITRE 7 Scroll et panoramiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Scroll Ă  vitesse constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 DĂ©placement d’un point Ă  un autre dans un plan panoramique . . . . . . . 123 DĂ©ïŹlement de plusieurs plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 CHAPITRE 8 Les transitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Transition entre deux images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Transition au chargement d’une animation . . . . . . . . . . . . . . . . . . . . . . . . 132 Transition en utilisant la classe TransitionManager() . . . . . . . . . . . . . . . . 134 CHAPITRE 9 Constructions dynamiques d’interfaces . . . . . . . . . . . . . . . . . . . . . . . 137 Placement dynamique de symboles sur la scĂšne . . . . . . . . . . . . . . . . . . . . 137 Travailler avec le nom des occurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Utilisation de ïŹchiers XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 XVII
  • 19. 150 scripts Livre Page XVIII Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 CrĂ©er un symbole modĂšle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 TracĂ© d’une carte gĂ©ographique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Imbriquer des animations les unes dans les autres. . . . . . . . . . . . . . . . . . . Travailler avec les coordonnĂ©es de la souris . . . . . . . . . . . . . . . . . . . . . . . . CrĂ©ation d’une palette de couleur avec getPixel() . . . . . . . . . . . . . . . . . . . Utilisation d’une palette de couleur utilisant getPixel() . . . . . . . . . . . . . . 152 155 157 158 161 CHAPITRE 10 ContrĂŽle et afïŹchage du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 RĂ©aliser une horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 RĂ©aliser un compte Ă  rebours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 RĂ©aliser un chronomĂštre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Calculer une date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 DĂ©velopper un calendrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Temporiser une action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 RĂ©pĂ©ter une action Ă  intervalles rĂ©guliers . . . . . . . . . . . . . . . . . . . . . . . . . . 187 RĂ©aliser un planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Planning sur plusieurs mois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 CHAPITRE 11 DĂ©placement de personnages ou d’objets . . . . . . . . . . . . . . . . . . . . DĂ©placement par clics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DĂ©placement par glisser-dĂ©placer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DĂ©placement par glisser-dĂ©placer avec perspective . . . . . . . . . . . . . . . . . . DĂ©placement avec ralentissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Yeux qui suivent la souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RĂ©aliser une loupe sur un plan ou une photo . . . . . . . . . . . . . . . . . . . . . . . Tester la collision entre deux occurrences . . . . . . . . . . . . . . . . . . . . . . . . . . ÉlasticitĂ© dans un mouvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 221 ÉlasticitĂ© dans un mouvement avec la classe Tween . . . . . . . . . . . . . . . . . . 222 Simuler la gravitĂ© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Faire tomber de la pluie ou de la neige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 ContrĂŽle par le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVIII 199 231 203 208 211 213 214 217
  • 20. 150 scripts Livre Page XIX Lundi, 20. ao t 2007 7:29 07 Table des matiĂšres SkyScraper dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 SkyScraper dynamique avec tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 CHAPITRE 12 La scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Informations et contrĂŽle de la scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 CHAPITRE 13 Enregistrement de scores et autres donnĂ©es . . . . . . . . . . . . . . . . . 243 Utilisation des cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Enregistrement dans une base MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Obtenir un identiïŹant unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 PARTIE II Les mĂ©dias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 CHAPITRE 14 ContrĂŽle des mĂ©dias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 RĂ©alisation d’un diaporama dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 RĂ©alisation d’un diaporama dynamique avec un ïŹchier XML . . . . . . . . . 260 RĂ©alisation d’un diaporama dynamique avec un ïŹchier XML et de nombreuses photos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RĂ©alisation d’un lecteur MP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RĂ©alisation d’un lecteur vidĂ©o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diffuser une vidĂ©o en streaming (Flash Media Server) . . . . . . . . . . . . . . RĂ©alisation d’un module de visioconfĂ©rence (Flash Media Server) . . . . RĂ©alisation d’un module de confĂ©rence (Flash Media Server) . . . . . . . . . ContrĂŽler une sĂ©quence QuickTime Ă  partir d’une piste Flash . . . . . . . Interaction du niveau d’entrĂ©e du microphone et de la scĂšne . . . . . . . . . 261 266 271 273 274 279 281 283 Sous-titrer une vidĂ©o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Synchroniser un son avec des textes et des images . . . . . . . . . . . . . . . . . . 290 Synchroniser un son au format FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 XIX
  • 21. 150 scripts Livre Page XX Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 CHAPITRE 15 Chat et RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 CrĂ©ation d’un chat avec Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . . 297 CrĂ©ation d’un lecteur de ïŹ‚ux RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Lecteur de ïŹ‚ux RSS avec un menu local dĂ©roulant . . . . . . . . . . . . . . . . . . . 308 Lecteur de ïŹ‚ux RSS sans composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 PARTIE III Manipulation du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 CHAPITRE 16 Mise en forme du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Mettre du texte en forme (classe TextFormat()) . . . . . . . . . . . . . . . . . . . . . Mettre du texte en forme (classe TextFormat() et CSS) . . . . . . . . . . . . . . . ContrĂŽler la casse et la nature d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . VĂ©riïŹcation de la saisie d’un texte en cours de frappe . . . . . . . . . . . . . . . . Le composant DataGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 322 327 329 332 CHAPITRE 17 Traitement du texte et des variables . . . . . . . . . . . . . . . . . . . . . . . . . . VĂ©riïŹer la validitĂ© d’une adresse e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Faire dĂ©ïŹler un texte avec ascenseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Faire dĂ©ïŹler un texte avec ascenseur des lignes cliquables . . . . . . . . . . . . 343 Faire dĂ©ïŹler un texte Description du ïŹchier . . . . . . . . . . . . . . . . . . . . . . . . 348 RĂ©aliser un systĂšme de mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 RĂ©aliser un module de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Rendre un texte cliquable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 GĂ©rer les tabulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 AfïŹchage en mode Telex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 AfïŹchage en mode AĂ©roport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 AfïŹchage de lettres glissant sur la scĂšne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 AfïŹchage d’un texte clignotant avec le ïŹltre GlowFilter . . . . . . . . . . . . . XX 335 368
  • 22. 150 scripts Livre Page XXI Lundi, 20. ao t 2007 7:29 07 Table des matiĂšres AfïŹchage d’un texte qui vibre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 AfïŹchage d’un texte qui explose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 CHAPITRE 18 Manipulation des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 AfïŹcher un tableau (array) sous forme de liste . . . . . . . . . . . . . . . . . . . . . 377 RĂ©aliser un quadrillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 RĂ©aliser une grille de calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Manipuler les tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 PARTIE IV Les jeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 CHAPITRE 19 Jeux pour enfants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Jeu du Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Puzzle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Puzzle avec chargement dynamique de photos . . . . . . . . . . . . . . . . . . . . . . 404 Jeu de coloriage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Jeu de mĂ©moire sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Jeu du morpion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Jeu du serpent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Jeu du taquin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 Jeu du pendu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Jeu du pendu avec plusieurs parties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 CHAPITRE 20 Autres jeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Machine Ă  sous (jackpot) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Jeu de tir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Jeu de grattage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 XXI
  • 23. 150 scripts Livre Page XXII Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Jeu de grattage avec utilisation d'un masque . . . . . . . . . . . . . . . . . . . . . . . . 453 Jeu de dames en rĂ©seau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Jeu du chemin le plus court . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 ModĂšles pour le jeu du chemin le plus court . . . . . . . . . . . . . . . . . . . . . . . . . 468 Exercice pĂ©dagogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 PARTIE V Autres fonctionnalitĂ©s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 CHAPITRE 21 Impression, e-mail et fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Envoyer un e-mail Ă  partir de Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Imprimer une animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Centrer une animation dans la fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 Redimensionner la fenĂȘtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Ouvrir une pop-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Appeler une fonction JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 CHAPITRE 22 System.capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 ConnaĂźtre la langue de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 ConnaĂźtre le systĂšme d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 ConnaĂźtre la version du Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 CHAPITRE 23 CD-Rom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CrĂ©er un projecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 ContrĂŽles d’une projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXII 495 497
  • 24. 150 scripts Livre Page XXIII Lundi, 20. ao t 2007 7:29 07 Table des matiĂšres ANNEXE Notions complĂ©mentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comment ça marche ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CrĂ©er une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GĂ©nĂ©rer un ïŹ‚ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Envoyer et recevoir un ïŹ‚ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les SharedObject avec Flash Media Server . . . . . . . . . . . . . . . . . . . . . . . . . Établir une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . indexOf() ou la recherche d’une chaĂźne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 503 504 505 506 Mise en forme du texte avec la classe TextFormat() . . . . . . . . . . . . . . . . . . 513 Changer la couleur d’une occurrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe Color() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MĂ©thode ColorTransform() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 515 515 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 508 509 511 XXIII
  • 25. 150 scripts Livre Page XXIV Lundi, 20. ao t 2007 7:29 07
  • 26. 150 scripts Livre Page 1 Lundi, 20. ao t 2007 7:29 07 Introduction Se prĂ©parer Ă  la lecture de l’ouvrage Comme nous l’évoquions dans l’avant-propos, nous prĂ©fĂ©rons nous assurer que vous maĂźtrisez certaines bases de l’ActionScript avant de vous lancer dans la lecture de cet ouvrage. Nous vous encourageons donc vivement Ă  parcourir les quelques pages qui suivent car elles prĂ©sentent des rappels Ă©lĂ©mentaires nĂ©cessaires pour une bonne comprĂ©hension des analyses des Ă©tudes de cas proposĂ©es dans ce livre. En ïŹn d’ouvrage, l’annexe vous fournira des explications communes Ă  plusieurs Ă©tudes de cas. À l’inverse, cette introduction vous offre en amont un rappel des notions Ă©lĂ©mentaires telles que : ‱ l’utilisation du XML dans Flash ; ‱ l’interprĂ©tation du nom d’une occurrence ; ‱ la gestion des lignes d’instructions contenues dans une boucle for() ; ‱ le sens du mot-clĂ© this selon les contextes. Il ne s’agit ni de simples introductions, ni d’explications acadĂ©miques exhaustives. Ces notions sont primordiales pour un dĂ©veloppeur Flash et nous les utiliserons trĂšs souvent dans nos Ă©tudes de cas, c’est pourquoi nous commencerons par les Ă©tudier ensemble ici.
  • 27. 150 scripts Livre Page 2 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Utilisation du XML dans Flash Comprendre le XML dans Flash Aujourd’hui, il est trĂšs difïŹcile de concevoir un dĂ©veloppement sans faire appel Ă  un ïŹchier XML, mais Ă  quoi sert exactement cette technologie ? Lorsque vous avez besoin de manipuler des donnĂ©es dans une animation Flash, dans le but de les traiter ou de les afïŹcher sur la scĂšne au moment de la lecture d’un ïŹchier .swf, plusieurs solutions s’offrent Ă  vous. ‱ Les variables peuvent contenir ces informations, mais il en faudra autant que vous avez de valeurs Ă  stocker/traiter. Cette technique n’est donc pas adaptĂ©e. ‱ Les tableaux prĂ©sentent l’avantage de pouvoir contenir plusieurs valeurs, mais le manque de souplesse dans le traitement des donnĂ©es contenues fait de cette technique une solution inadaptĂ©e. Dans ce cas, quelle autre possibilitĂ© avons-nous ? Dans certaines applications, l’utilisation d’un ïŹchier texte contenant des paires variable = valeur & variable2 = valeur
 pourrait nous sufïŹre, mais cette technique reste proche de celle du tableau. La meilleure des solutions reste tout de mĂȘme l’utilisation du XML. Malheureusement, cette derniĂšre solution a mauvaise rĂ©putation auprĂšs des novices car elle semble compliquĂ©e par l’apparence des documents qu’il est nĂ©cessaire de gĂ©nĂ©rer en XML et des lignes d’instructions en ActionScript qu’il faut saisir. Relevons le dĂ©ïŹt ! Le principe d’un ïŹchier XML est de contenir des balises qui en imbriquent d’autres. Avant d’aller plus loin et d’ĂȘtre trop technique, commençons par ce petit exemple Ă  la portĂ©e de tout le monde, y compris les nĂ©ophytes. Imaginons un bĂątiment, celui d’une bibliothĂšque, qui contiendrait quatre Ă©tages proposant des publications classĂ©es par thĂšmes. Au premier Ă©tage, des livres pour les jeunes, au deuxiĂšme, des publications scientiïŹques, au troisiĂšme des romans et CD et enïŹn au dernier Ă©tage les publications de presse. Voici Ă  quoi pourrait ressembler la structure principale du document XML. <Bibliotheque> <Accueil></Accueil> <Jeunes></Jeunes> <Sciences></Sciences> <Loisirs></Loisirs> <Presse></Presse> </Bibliotheque> Vous remarquerez qu’une balise ouverte est obligatoirement fermĂ©e. Si elle ne l’est pas, le document n’est pas valide et il sera alors impossible de le parcourir, comme dans l’exemple suivant oĂč la balise <Sciences> est mal fermĂ©e. <Bibliotheque> <Accueil></Accueil> <Jeunes></Jeunes> 2
  • 28. 150 scripts Livre Page 3 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction <Sciences><Sciences> <Loisirs></Loisirs> <Presse></Presse> </Bibliotheque> Remarque Parser un document, revient Ă  lire et interprĂ©ter le contenu d’un document. Le terme « arbre » est Ă©galement un synonyme de « document XML ». SimpliïŹons davantage notre premier exemple aïŹn d’y ajouter des valeurs. <Bibliotheque> <Accueil>1</Accueil> <Jeunes>3</Jeunes> <Sciences>2</Sciences> </Bibliotheque> Les trois chiffres que nous venons d’ajouter correspondent au personnel affectĂ© Ă  chaque Ă©tage. Avant d’aller plus loin, apportons un premier mot de vocabulaire. Le nƓud est un terme qui dĂ©signe un niveau dans un document. Il contient deux balises, une qui indique son ouverture et une autre qui indique sa fermeture. Entre les deux balises, on place une valeur. <Jeunes>3</Jeunes> L’exemple ci-dessus est donc un nƓud dont le nom de balise est Jeunes, il contient une valeur, Ă  savoir le chiffre 3. Il existe une autre syntaxe qui ne contient qu’une seule balise. Dans ce cas, elle ne peut contenir que des attributs, mais pas de valeurs. <Jeunes effectifs= "3"/> Dans l’exemple ci-dessus, la balise dont le nom est Jeunes contient un attribut intitulĂ© effectifs dont la valeur est 3. Dois-je utiliser plutĂŽt des valeurs ou attributs ? On se pose souvent cette question. Ne choisissez pas de crĂ©er tous vos documents XML avec des nƓuds contenant des valeurs sans attributs et inversement. Selon la nature de vos besoins, vous combinerez d’ailleurs sĂ»rement les deux. Vous dĂ©couvrirez au travers des diffĂ©rentes Ă©tudes de cas de ce livre, que les exemples sont tous trĂšs diffĂ©rents. Remarque L’avantage d’utiliser les attributs est de pouvoir faire rĂ©fĂ©rence Ă  un nom sans se soucier de sa position. 3
  • 29. 150 scripts Livre Page 4 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Avant d’apprendre Ă  charger un document XML dans un SWF, comment fait-on pour le crĂ©er ? CrĂ©er un document XML La technique est trĂšs simple, commencez par lancer un Ă©diteur de texte qui gĂšre de prĂ©fĂ©rence l’UTF-8, puis suivez ces instructions : 1. CrĂ©ez un nouveau document. 2. Saisissez le script simpliïŹĂ© (5 lignes de script ïŹgurant page 3). 3. Enregistrez votre document sous le nom biblio.xml. Remarque Assurez-vous que l’encodage du ïŹchier est en Unicode ou en UTF-8. Utilisez le bouton Options ou le menu local dĂ©roulant dans la fenĂȘtre d'enregistrement pour dĂ©ïŹnir ou vĂ©riïŹer le format. Parfois, ce rĂ©glage doit se faire dans les menus du logiciel ou dans sa barre d'outils, car il s’agit d’un attribut ou d’une propriĂ©tĂ© de la page. Les spĂ©cialistes en XML pourraient crier au scandale ! « Il ne parle mĂȘme pas de l’encodage, ni de la version du XML qu’il faut prĂ©ciser sur la premiĂšre ligne du document ». Oui, ce document est vraiment simpliïŹĂ©, mais nous devons apprendre le strict minimum pour commencer. Cette structure fonctionne trĂšs bien, il n’y a aucune raison pour que nous soyons exhaustif Ă  ce niveau-lĂ  des explications. Charger un document XML Quel est le code en ActionScript qui permet de charger le contenu de ce document dans un SWF ? var charge = new XML(); charge.load("biblio.xml"); VoilĂ , c’est tout ! Le contenu du ïŹchier biblio.xml est Ă  prĂ©sent dans le SWF et plus particuliĂšrement dans l’instance intitulĂ©e charge qui est comparable Ă  une variable. Il aura sufïŹ de crĂ©er une instance de la classe XML avec le constructeur new puis de charger le ïŹchier au moyen de la mĂ©thode load() de la classe XML(). Le player Flash a chargĂ© le contenu du ïŹchier, puis il a lu toutes les lignes du document. Remarque La premiĂšre ligne d’un document XML porte le numĂ©ro d'index 0. Dans notre exemple, nous avons deux nƓuds dont les numĂ©ros d'index sont 0 et 1. 4
  • 30. 150 scripts Livre Page 5 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction Avant de continuer les explications, nous devons rĂ©soudre un premier problĂšme. Si un saut de paragraphe a Ă©tĂ© insĂ©rĂ© entre les deux lignes Jeunes et Sciences, est-ce que le player Flash doit comptabiliser la ligne vide comme un nƓud ? <Bibliotheque> Jeunes>3</Jeunes> <Sciences>2</Sciences> </Bibliotheque> Est-ce que le nƓud <Sciences> porte l’index 1 ou 2 ? Il serait trĂšs difïŹcile de se passer des sauts de paragraphe gĂ©nĂ©rĂ©s volontairement pour espacer les lignes, structurer ainsi l’arbre et faciliter sa lecture. Si une ligne de commentaire est ajoutĂ©e, comment prĂ©ciser au player Flash qu’il ne s’agit pas d’un nƓud ? Tout simplement en lui signiïŹant que les blancs (lignes vides et commentaires) doivent ĂȘtre ignorĂ©s. var charge = new XML(); charge.load("biblio.xml"); charge.ignoreWhite = true; Attention N’oubliez pas de saisir un W majuscule au milieu de la propriĂ©tĂ© ignoreWhite. À ce niveau-lĂ  de l’explication, nous avons bien compris que le contenu du document XML se trouve dans charge. Mais comment lire les nƓuds contenus dans l’instance ? Avant de rĂ©pondre Ă  cette question, une autre se pose. Vous constaterez rapidement que certains documents XML peuvent ĂȘtre trĂšs longs, donc trĂšs lourds Ă  charger. Lorsque la ligne d’instruction charge.load("biblio.xml") s’exĂ©cute, les donnĂ©es sont-elles dans la mĂ©moire vive de l’ordinateur en une fraction de seconde ? Tout dĂ©pend de la vitesse de votre connexion Ă  Internet et du poids du document. Quoi qu’il en soit, le temps de chargement du ïŹchier XML sera beaucoup plus long que le temps d’exĂ©cution des lignes d’instructions de votre script. En partant de ce constat, il est plus facile de comprendre pourquoi nous n’avons pas le droit d’ajouter la ligne suivante : var charge = new XML(); charge.load("biblio.xml"); charge.ignoreWhite = true; vAffichage = charge; La variable vAffichage est celle d’un texte dynamique sur la scĂšne. En exĂ©cutant ce script, nous pourrions nous attendre Ă  ce que le contenu de l’instance vienne s’afïŹcher sur la scĂšne. Et bien non ! Il faut d’abord s’assurer que le contenu du document XML est bien chargĂ© en mĂ©moire vive de votre ordinateur avant de tenter de faire appel Ă  lui. Nous devons donc ajouter ce gestionnaire : var charge = new XML(); charge.load("biblio.xml"); charge.ignoreWhite = true; 5
  • 31. 150 scripts Livre Page 6 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 charge.onLoad = function() { vAffichage = charge; }; Au moment oĂč le chargement est terminĂ©, la variable vAffichage va enïŹn pouvoir contenir charge. VoilĂ , si vous n’ĂȘtes pas sĂ»r(e) d’avoir tout compris, nous vous invitons vivement Ă  relire ces explications car nous allons Ă  prĂ©sent essayer de comprendre comment lire un nƓud. Lire un nƓud Attention Avant toute chose, il est important que vous sachiez que les nƓuds d’une instance XML fonctionnent sur le mĂȘme principe que les entrĂ©es d’un tableau. Le premier nƓud porte l'index 0. La technique est une fois encore trĂšs simple, soyons mĂ©thodiques et n’allons pas trop vite. Imaginons que nous ayons deux textes dynamiques sur la scĂšne dont les noms de variables sont nbrPersonnesJeunes et nbrPersonnesSciences. Voici Ă  quoi devrait ressembler le script de votre animation pour placer le contenu de l’instance charge sur la scĂšne. Remarque À partir de maintenant, nous ne reprenons plus les trois premiĂšres lignes du script, elles seront Ă  chaque fois sous-entendues. charge.onLoad = function() { nbrPersonnesJeunes = charge.childNodes[0].childNodes[0]; nbrPersonnesSciences = charge.childNodes[0].childNodes[1]; }; Mais que signiïŹe charge.childNodes[0] ? Pour mieux comprendre, voici le contenu d’un document XML qui n’est pas valide, mais nĂ©anmoins acceptĂ© par Flash. <Bibliotheque> <Jeunes>3</Jeunes> <Sciences>2</Sciences> </Bibliotheque> <Piscine> <Bassin>3</Bassin> <Administratif>2</Administratif> </Piscine> AprĂšs chargement du ïŹchier XML, nous pouvons dire que l’instance charge contient l’ensemble des balises. Donc, nous devons toujours commencer une ligne d’instruction par charge pour y faire rĂ©fĂ©rence. Maintenant, pourquoi Ă©crire childNodes[0] systĂ©matiquement aprĂšs le nom de l’instance ? Dans notre exemple d’origine la premiĂšre et unique 6
  • 32. 150 scripts Livre Page 7 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction balise s’intitule Bibliotheque. Il n’existe pas d’autre balise Ă  la racine. Elle porte donc le numĂ©ro d’index 0, d’oĂč le rĂ©sultat charge.childNodes[0], c’est-Ă -dire le nƓud dont l’index est 0 dans l’instance charge. Dans le dernier exemple donnĂ©, nous avons deux balises Ă  la racine. Bibliotheque et Piscine. Imaginez qu’un arbre ait deux troncs Ă  la base ! Ce ne serait plus un arbre ! MĂȘme si la nature le tolĂšre sĂ»rement, en XML, cela n’est pas possible. Alors le script qui va suivre est acceptĂ© en ActionScript, mais pas dans les applications qui gĂšrent correctement le XML. nbrPersonnesJeunes = charge.childNodes[0].childNodes[0]; nbrPersonnesBassin = charge.childNodes[1].childNodes[0]; Les deux lignes suivantes vont s’afïŹcher dans les textes dynamiques sur la scĂšne. <Jeunes>3</Jeunes> <Bassin>3</Bassin> Retenons donc que la valeur du premier childNodes ne peut ĂȘtre diffĂ©rente de 0. Pourquoi ne peut-on pas obtenir 3 Ă  la place de <Jeunes>3</Jeunes> ? C’est Ă  nous d’indiquer au player Flash qu’il doit aller plus loin dans l’arborescence. Si nous reprenons donc correctement notre code, voici Ă  quoi il doit ressembler : nbrPersonnesJeunes = charge.childNodes[0].childNodes[0].firstChild; nbrPersonnesSciences = charge.childNodes[0].childNodes[1].firstChild; Essayons de traduire ce que comprend le player Flash. charge.Bibliotheque.Jeunes.firstChild; Le mot firstChild revient Ă  Ă©crire childNodes[0], c’est-Ă -dire la premiĂšre information contenue dans un nƓud. La valeur 3 est donc considĂ©rĂ©e comme un nƓud, tout du moins considĂ©rĂ©e comme la premiĂšre information contenue dans charge.Bibliotheque[0].Jeunes[0]. Imaginons Ă  prĂ©sent que les nƓuds <Jeunes> et <Sciences> en contiennent d’autres. <Bibliotheque> <Jeunes> <Personne>Laurence</Personne> <Personne>Lola</Personne> <Personne>Manon</Personne> <Personne>Julie</Personne> </Jeunes> <Sciences> <Personne>Pascale</Personne> <Personne>Celia</Personne> <Personne>Charlene</Personne> </Sciences> </Bibliotheque> Notre ïŹchier XML ne se contente plus de contenir des numĂ©ros indiquant les effectifs, mais des noms de personnes affectĂ©es aux Ă©tages des Jeunes et des Sciences. 7
  • 33. 150 scripts Livre Page 8 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Pour lire Julie, il faut donc demander au player Flash de passer par les nƓuds suivants : vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].firstChild; Sur la scĂšne, un texte dynamique dont le nom de variable est vResponsable va afïŹcher le mot Julie. Vous savez Ă  prĂ©sent parcourir tout un document. Nous n’aborderons pas dans ce chapitre la combinaison du XML dans Flash avec les boucles for() car de nombreuses Ă©tudes de cas font appel Ă  cette combinaison. Nous analyserons la structure du script, mais pour l’instant, revenons plutĂŽt sur une notion trĂšs intĂ©ressante. Jusqu’à prĂ©sent, nous avons utilisĂ© des valeurs telles que : 3 et Julie, mais que sont les attributs en XML ? Lire un attribut Le document XML suivant prĂ©sente Ă  nouveau une partie des effectifs de notre bibliothĂšque, mais sous une forme diffĂ©rente. Imaginons en effet que nous ayons de nombreux nƓuds, c’est-Ă -dire de nombreuses lignes. Est-il indispensable d’avoir une valeur pour chaque nƓud ? <Bibliotheque> <Jeunes> <Personne nom="Laurence"/> <Personne nom="Lola"/> <Personne nom="Manon"/> <Personne nom="Julie"/> </Jeunes> </Bibliotheque> Cette syntaxe prĂ©sente l’avantage de simpliïŹer votre document car les lignes y sont moins longues et plus claires dĂšs lors qu’on a compris la notion d’attribut. Voici une mĂ©thode pour lire un attribut. 1. Commencez par prĂ©ciser le chemin du nƓud dont vous souhaitez lire un attribut. vResponsable = charge.childNodes[0].childNodes[0].childNodes[3] 2. Ajoutez le mot attributes sĂ©parĂ© par un point. vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].attributes 3. Pour ïŹnir, indiquez le nom de l’attribut. vResponsable = charge.childNodes[0].childNodes[0].childNodes[3].attributes.nom; PrĂ©cisons qu’une balise peut contenir plusieurs attributs comme dans l’exemple suivant. <Personne nom="Laurence" age = "35" profession ="Enseignante"/> Si vous le souhaitez, vous pouvez combiner les attributs et les valeurs dans une balise. Voici ce que cela pourrait donner : <Personne age = "37" yeux ="noirs" taille ="165">Laurence</Personne> 8
  • 34. 150 scripts Livre Page 9 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction Pointer directement sur un nƓud grĂące Ă  la propriĂ©tĂ© idMap Avec l’arrivĂ©e de Flash 8, une nouvelle propriĂ©tĂ© a fait son apparition
 et quelle propriĂ©tĂ© ! Dans Flash MX 2004 et les versions antĂ©rieures, pour atteindre un nƓud prĂ©cis, vous deviez parcourir toute l’arborescence de votre instance XML. Avec le player Flash 8, vous avez la possibilitĂ© d’utiliser la propriĂ©tĂ© idMap pour pointer directement sur un nƓud qui doit possĂ©der obligatoirement un attribut intitulĂ© id, quel que soit son niveau. Prenons l’exemple d’un ïŹchier intitulĂ© societe.xml dont la structure est la suivante : <Bibliotheque> <Personne id="Marie" nom="Dupond"> <Profession>Enseignante</Profession> <Age>27</Age> </Personne> <Personne id="Marc" nom="Martin"> <Profession>Coursier</Profession> <Age>24</Age> </Personne> <Personne id="JĂ©rĂŽme" nom="Durand"> <Profession>Responsable de dĂ©partement</Profession> <Age>35</Age> </Personne> </Bibliotheque> Ce document contient trois nƓuds enfants de niveau 1 Ă  la racine. Chacun possĂšde deux propriĂ©tĂ©s intitulĂ©es id et nom. Pour pointer sur le nƓud 2 de niveau 1 (JĂ©rĂŽme Durand), il faudrait utiliser le script suivant : charge = new XML(); charge.load("societe.xml"); charge.ignoreWhite = true; charge.onLoad = function() { resultat = charge.firstChild.childNodes[2]; }; Il existe une solution plus simple qui fait appel Ă  la propriĂ©tĂ© idMap. charge = new XML(); charge.load("societe.xml"); charge.ignoreWhite = true; charge.onLoad = function() { resultat = charge.idMap["JĂ©rĂŽme"]; }; Comme vous pouvez le constater, il est plus aisĂ© de faire rĂ©fĂ©rence Ă  une information qui parle davantage qu’un numĂ©ro. Attention toutefois Ă  certains abus : que se passe-t-il s’il existe plusieurs JĂ©rĂŽme dans notre arborescence ? Et bien ce sera le dernier nƓud qui possĂšde cette valeur d’attribut qui sera retenu. 9
  • 35. 150 scripts Livre Page 10 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Par consĂ©quent, utilisez cette technique avec des valeurs qui doivent ĂȘtre uniques d’un nƓud Ă  l’autre, telles qu’un numĂ©ro de sĂ©curitĂ© social, une clĂ© primaire propre Ă  un enregistrement, un code personnel, etc. Notre exemple est volontairement simple pour cette premiĂšre approche du XML. PrĂ©cisons tout de mĂȘme que la propriĂ©tĂ© idMap est Ă©galement trĂšs intĂ©ressante pour les nƓuds dont le niveau est Ă©levĂ©, cela permet de raccourcir les chemins. Voici une comparaison, partons de ce nouveau document. <Bibliotheque> <Jeunes> <Personne id="Marie" nom="Dupond"> <Profession>Enseignante</Profession> <Age>27</Age> </Personne> <Personne id="Marc" nom="Martin"> <Profession>Coursier</Profession> <Age>24</Age> </Personne> <Personne id="JĂ©rĂŽme" nom="Durand"> <Profession>Responsable de dĂ©partement</Profession> <Age>35</Age> </Personne> </Jeunes> <Sciences> <Personne id="Eva" nom="Girondon"> <Profession>En retraite</Profession> <Age>58</Age> </Personne> <Personne id="Daniel" nom="Duvent"> <Profession>En congĂ©s paternitĂ©</Profession> <Age>26</Age> </Personne> <Personne id="Georges" nom="Maltris"> <Profession>En maladie</Profession> <Age>35</Age> </Personne> </Sciences> </Bibliotheque> Pour afïŹcher En retraite dans un texte dynamique intitulĂ© etatActuel sur la scĂšne, voici les deux mĂ©thodes : ‱ avec utilisation de la propriĂ©tĂ© idMap : charge.onLoad = function() { etatActuel = charge.idMap["Eva"].childNodes[0].firstChild; }; ‱ avec la rĂ©fĂ©rence Ă  un chemin relatif Ă  la racine : charge.onLoad = function() { etatActuel = charge.firstChild.childNodes[1].childNodes[0].childNodes[0].firstChild; } 10
  • 36. 150 scripts Livre Page 11 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction Informations complĂ©mentaires Nombre de nƓuds TrĂšs souvent, vous aurez besoin de connaĂźtre le nombre de nƓuds contenus Ă  l’intĂ©rieur d’un autre. C’est la propriĂ©tĂ© length qui vous permettra de compter ces lignes. Dans notre dernier exemple, le nƓud <Jeunes> en contient 3. Voici la ligne d’instruction qui permet de renvoyer cette valeur. nbrNoeuds = charge.childNodes[0].childNodes[0].childNodes.length; Vous constaterez que le dernier childNodes n’est pas spĂ©ciïŹĂ©, c’est normal car vous souhaitez obtenir le nombre de tous les nƓuds et non un en particulier ! Il ne faut pas aller trop loin. Comme nous l’avions fait prĂ©cĂ©demment, essayons de traduire cette ligne d’instruction. nbrNoeuds = charge.Bibliotheque[0].Jeunes.tousSesNoeuds.length; Nom d’un nƓud Dans certains cas, il s’avĂšre trĂšs pratique d’exploiter le nom d’un nƓud s’il est reprĂ©sentatif. Dans cet exemple, nous constaterons qu’il est trĂšs aisĂ© de lire cette information. <Bibliotheque> <Jeunes> <Personne> <Nom>Dupond</Nom> <Profession>Enseignante</Profession> <Age>27</Age> </Personne> </Jeunes> </Bibliotheque> vNom = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeName; vProfession = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[1].nodeName; vAge = charge.childNodes[0].childNodes[0].childNodes[0].childNodes[2].nodeName; Utilisez le mot nodeName comme vous l’avez fait avec attributes. La seule difïŹcultĂ© reste une fois encore d’indiquer le bon chemin, mais lĂ  il n’y a pas de piĂšge ! Premier exemple Imaginons ce scĂ©nario qui contiendra des imbrications : Vous vous rendez dans la bibliothĂšque de votre ville, car vous avez besoin d'un ouvrage. ArrivĂ© Ă  l’accueil qui se trouve au rez-de-chaussĂ©e, on vous indique que quatre Ă©tages sont Ă  votre disposition. Les horaires vous sont communiquĂ©s ainsi que les jours d’ouverture. Il s’agit d’un bĂątiment de cinq Ă©tages. Le premier est consacrĂ© aux livres pour les jeunes enfants. Le deuxiĂšme regroupe les publications scientiïŹques destinĂ©es aux Ă©tudiants et professionnels. 11
  • 37. 150 scripts Livre Page 12 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Le troisiĂšme Ă©tage propose des romans et une CDthĂšque (CD-Rom et CD audio). Le quatriĂšme est consacrĂ© Ă  la presse (publications quotidiennes, hebdomadaires et mensuelles uniquement). EnïŹn, le dernier Ă©tage auquel vous n’avez pas accĂšs est rĂ©servĂ© Ă  l’administration. Essayons de reprĂ©senter votre bibliothĂšque sous forme de diagramme. Figure I-1 La structure d’un document XML s’appuie sur ce genre de diagramme. L’effort de comprĂ©hension que vous avez Ă  faire pour lire ce diagramme est minime car nous vous avons expliquĂ© prĂ©alablement sa signiïŹcation. Nous n’allons pas tout de suite vous prĂ©senter le ïŹchier XML correspondant avec des articles dans les avant-derniers nƓuds, vous pourriez prendre peur. Commençons plutĂŽt par une reprĂ©sentation simpliïŹĂ©e. <Bibliotheque> <Jeunes> <Scolaires></Scolaires> <BD></BD> <Lecture></Lecture> </Jeunes> <Sciences> 12
  • 38. 150 scripts Livre Page 13 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction <Physique></Physique> <Chimie></Chimie> <Telecommunications></Telecommunications> </Sciences> <Loisirs> <CDTheque> <CDAudio></CDAudio> <CDRom></CDRom> </CDTheque> <Romans> <Policiers></Policiers> <Amour></Amour> </Romans> </Loisirs> <Presse> <Quotidienne></Quotidienne> <Hebdo></Hebdo> <Mensuelle></Mensuelle> </Presse> </Bibliotheque> PremiĂšre observation : deux balises peuvent se suivre sur la mĂȘme ligne ou l’une sous l’autre. Cela n’a aucune importance. Si vous avez une seule information Ă  enfermer entre deux balises, autant le faire sur une seule ligne. Dans le cas des balises <Jeunes> et </Jeunes>, vous constatez qu’il y a plusieurs informations Ă  stocker, vous n’avez plus le choix, vous ĂȘtes obligĂ© de le faire sur plusieurs lignes. Pour faciliter davantage la lecture de ce document, nous allons dĂ©couper l’arbre XML en plusieurs parties. Cet exemple reprĂ©sente la bibliothĂšque et ses Ă©tages. <Bibliotheque> <Jeunes></Jeunes> <Sciences></Sciences> <Loisirs></Loisirs> <Presse></Presse> </Bibliotheque> Voici une autre structure qui aboutit au mĂȘme rĂ©sultat. <Bibliotheque> <Jeunes> </Jeunes> <Sciences> </Sciences> <Loisirs> </Loisirs> 13
  • 39. 150 scripts Livre Page 14 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 <Presse> </Presse> </Bibliotheque> Penchons-nous Ă  prĂ©sent sur le troisiĂšme nƓud. Il possĂšde deux nƓuds enfants. <Loisirs> <CDTheque> </CDTheque> <Romans> </Romans> </Loisirs> Ces deux nƓuds possĂšdent Ă  leur tour des nƓuds enfants : <CDTheque> <CDAudio></CDAudio> <CDRom></CDRom> </CDTheque> et <Romans> <Policiers></Policiers> <Amour></Amour> </Romans> Nous allons nous arrĂȘter lĂ , vous l’aurez compris, lorsque vous ouvrez une balise, deux solutions s’offrent Ă  vous. ‱ Vous ajoutez deux autres balises (ouvrantes et fermantes) avant de la fermer. ‱ Vous la fermez aprĂšs avoir simplement saisi une valeur. AprĂšs cette dĂ©monstration, essayez de lire le document suivant en faisant abstraction dans un premier temps des donnĂ©es qu’il contient (les livres et CD). <Bibliotheque horaires="8H00-12H00 et 13H00-17H30" joursOuverture="Du lundi au samedi"> <Jeunes> <Scolaires> <Livre numero = "00001" editeur = "Hachette">La France de 1900 Ă  nos jours</Livre> <Livre numero = "00002" editeur = "Bayard">MathĂ©matiques en 6e</Livre> </Scolaires> <BD> <Livre numero = "00034" editeur = "Casterman">Toto en AmĂ©rique</Livre> <Livre numero = "00035" editeur = "Casterman">Toto au Tibet</Livre> </BD> <Lecture> <Livre numero = "00370" editeur = "Le PĂ©ron">Les aventures de Marine</Livre> <Livre numero = "00371" editeur = "Le pĂ©ron">Qui est arrivĂ© au Tibet ?</Livre> </Lecture> </Jeunes> <Sciences> 14
  • 40. 150 scripts Livre Page 15 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction <Physique> </Physique> <Chimie> </Chimie> <Telecommunications> </Telecommunications> </Sciences> <Loisirs> <CDTheque> <CDAudio> <CD numero = "100001" editeur = "Plusieurs grammes">Brel</CD> <CD numero = "100002" editeur = "Plusieurs grammes">Gainsbourg</CD> </CDAudio> <CDRom> <CD numero = "200001" editeur = "Montarnace">Le soleil jaune</CD> <CD numero = "200002" editeur = "Montarnace">Gribiste le chaton</CD> </CDRom> </CDTheque> <Romans> <Policiers> <Livre numero = "00642" editeur = "Dective">Qui a tuĂ© le grand ?</Livre> <Livre numero = "00643" editeur = "Dective">Sur les traces de Robert</Livre> </Policiers> <Amour> <Livre numero = "00798" editeur = "Lovatrice">Ils s'aiment dans le vent</Livre> <Livre numero = "00799" editeur = "Lovatrice">L'amour impossible</Livre> </Amour> </Romans> </Loisirs> <Presse> <Quotidienne> <Journal numero = "900001" date ="03/02/1970">Le matin</Journal> <Journal numero = "900002" date ="03/02/1970">Le soir</Journal> </Quotidienne> <Hebdo> <Magazine numero = "900008" date ="03/02/1970">Le nouveau regardeur</Magazine> <Magazine numero = "900009" date ="03/02/1970">La femme au drapeau</Magazine> </Hebdo> <Mensuelle> <Magazine numero = "900032" date ="02/1977">ProblĂšmes Constants Magazine</Magazine> <Magazine numero = "900033" date ="02/1977">Meilleurs Achats Consommateurs</Magazine> </Mensuelle> </Presse> </Bibliotheque> VoilĂ , nous venons de crĂ©er un document XML que vous seriez susceptible de devoir concevoir en mĂ©langeant valeurs et attributs. Se passer de l’un ou de l’autre aurait Ă©tĂ© dommage. 15
  • 41. 150 scripts Livre Page 16 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 DeuxiĂšme exemple Prenons l’exemple d’un coursier qui doit tous les jours aller chercher une enveloppe dans une sociĂ©tĂ© X pour l’emmener dans une autre. Christophe, notre coursier, connaĂźt bien la sociĂ©tĂ© X, il n’a plus besoin de demander Ă  l’accueil qu’on lui apporte le paquet qu’il doit transporter, il va le chercher directement. La structure d’un document XML est comparable Ă  n’importe quelle construction immobiliĂšre qui reprĂ©sente un ensemble composĂ© de sous-parties. L’enveloppe que doit aller chercher Christophe se trouve quelque part sur une Ă©tagĂšre dans les locaux de la sociĂ©tĂ© commanditaire. L’immeuble est composĂ© d’étages qui contiennent des services ou dĂ©partements qui, eux-mĂȘmes, contiennent des bureaux ou piĂšces qui contiennent Ă  leur tour des armoires avec des Ă©tagĂšres. Sur une mĂȘme Ă©tagĂšre, il y a des parties. À gauche de l’étagĂšre, au centre et Ă  droite, ce sont autant d’emplacements diffĂ©rents sur lesquelles on peu placer des documents. Christophe doit donc aller chercher une enveloppe qui se trouve au troisiĂšme Ă©tage, au service du courrier, bureau 320, dans la troisiĂšme armoire (en partant de la gauche), sur la premiĂšre Ă©tagĂšre en partant du haut. Comment pourrions-nous reprĂ©senter cette hiĂ©rarchie s’il s’agissait d’un document XML ? La sociĂ©tĂ© X a choisi de rĂ©partir un service par Ă©tage, nous pourrions donc dĂ©jĂ  reprĂ©senter sa structure sous cette forme : <SocieteX> <Commercial></Commercial> <Technique></Technique> <Communication></Communication > <Administratif></Administratif > </SocieteX> Pour l’instant, nous avons un document XML qui contient quatre nƓuds enfants Ă  la racine. Le troisiĂšme nƓud (dont le numĂ©ro d’index est 2, car le premier porte le numĂ©ro d’index 0) est l’étage Communication. Ajoutons-lui des services. <SocieteX> <Commercial></Commercial> <Technique></Technique> <Communication> <CommInterne> </CommInterne> <CommExterne> </CommExterne> <Courrier> </Courrier> </Communication > <Administratif></Administratif > </SocieteX> Les services de communication interne et externes et de courrier ont Ă©tĂ© ajoutĂ©s. Si nous essayons maintenant d’imaginer Ă  quoi pourrait ressembler un service ou un dĂ©partement dans une entreprise, nous avons deux solutions. Soit, ce sont des open spaces, soit 16
  • 42. 150 scripts Livre Page 17 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction des bureaux qui dĂ©limitent les emplacements des diffĂ©rents employĂ©s et donc des activitĂ©s. Au service du courrier, deux personnes ont Ă©tĂ© affectĂ©es. HervĂ© et David. Ils ont chacun leur bureau. Dans celui de David, il y a trois armoires. <SocieteX> <Commercial> </Commercial> <Technique> </Technique> <Communication> <CommInterne> </CommInterne> <CommExterne> </CommExterne> <Courrier> <Bureau numero = "319" occupant = "HervĂ© TIVERT" /> <Bureau numero = "320" occupant = "David LOUIS"> <Armoire></Armoire> <Armoire></Armoire> <Armoire> <Etagere> courrierExpeditionCoursier.pdf </Etagere> <Etagere></Etagere> <Etagere></Etagere> </Armoire> </Bureau> </Courrier> </Communication> <Administratif> </Administratif> </SocieteX> La troisiĂšme armoire possĂšde trois Ă©tagĂšres. Souvenez-vous, c’est sur la premiĂšre que Christophe, notre coursier, doit prendre le pli. La reprĂ©sentation du document XML est faite, Ă  prĂ©sent, comment pointer vers ce nƓud ? charge = new XML(); charge.load("SocieteX.xml"); charge.ignoreWhite = true; charge.onLoad = function() { pliAPrendre = charge.childNodes[0].childNodes[2].childNodes[2].childNodes[1] ➄.childNodes[2].childNodes[0].childNodes[0]; }; Si vous n’avez pas lu le dĂ©but de ce chapitre, une premiĂšre question vous vient sĂ»rement Ă  l’esprit : pourquoi y a-t-il autant de nƓuds et surtout Ă  quoi correspondent-ils ? Pour rĂ©pondre Ă  cette question, nous allons Ă  nouveau essayer d’interprĂ©ter chaque childNodes. Commençons par rappeler que charge.ChidlNodes[0] est obligatoire, c’est pour indiquer le chemin des nƓuds Ă  aller chercher. charge.childNodes[0].communication.courrier.bureau320.armoire3.etagere1 17
  • 43. 150 scripts Livre Page 18 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Attention La syntaxe de l’exemple ci-dessus n’est pas valable, il s’agit d'une explication sur la base d’une mĂ©taphore. Le tableau suivant va vous permettre de comprendre comment nous pourrions parcourir le document XML. Tableau 1 Correspondance des nƓuds et Ă©tages Étages Code Commercial charge.childNodes[0].childNodes[0] Technique charge.childNodes[0].childNodes[1] Communication charge.childNodes[0].childNodes[2] Administration charge.childNodes[0].childNodes[3] Retenons Ă  prĂ©sent que le nƓud qui nous intĂ©resse est celui de la communication, c’est-Ă dire charge.childNodes[0].childNodes[2]. Voici un deuxiĂšme tableau qui vous propose les diffĂ©rents services disponibles Ă  l’étage de la communication. Tableau 2 Correspondance des nƓuds et services Services Code Communication interne charge.childNodes[0].childNodes[2].childNodes[0] Communication externe charge.childNodes[0].childNodes[2].childNodes[1] Courrier charge.childNodes[0].childNodes[2].childNodes[2] La ligne d’instruction qui nous intĂ©resse est celle du service courrier. Vous l’aurez compris, il sufïŹt de compter Ă  chaque fois Ă  partir de 0 et de compter le numĂ©ro de ligne, appelĂ© « index », qui correspond Ă  l’information recherchĂ©e. Pourquoi y a-t-il un dernier childNodes[0] ? Une fois encore, pour rĂ©pondre Ă  cette question, essayons de comprendre ce que nous renverrait la ligne suivante si elle ne contenait pas le dernier childNodes[0] : pliAPrendre = charge.childNodes[0].childNodes[2].childNodes[2].childNodes[1] ➄.childNodes[2].childNodes[0] <Etagere>courrierExpeditionCoursier.pdf</Etagere> La ligne d’instruction vous renvoie le nƓud que vous avez spĂ©ciïŹĂ©. Vous souhaitez obtenir le contenu de ce nƓud. Dans ce cas, vous disposez de trois solutions : ‱ vous ajoutez childNodes[0] ; 18
  • 44. 150 scripts Livre Page 19 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction ‱ vous ajoutez firstChild ; ‱ vous n’ajoutez rien, mais vous cochez la case d’interprĂ©tation des balises HTML du texte dynamique ou de saisie dans lequel le rĂ©sultat sera afïŹchĂ©. Figure I-2 Cochez cette case pour demander au player Flash d’interprĂ©ter les balises contenues dans un texte dynamique ou de saisie. ‱ InterprĂ©tation du nom d’une occurrence Lorsque vous faites rĂ©fĂ©rence au nom d’une occurrence, vous prĂ©cisez le chemin et cela reprĂ©sente parfois une premiĂšre difïŹcultĂ© pour les nĂ©ophytes. Nous ne reviendrons pas sur cette notion, car ce n’est pas ici l’objet de ce rappel. En revanche, nous allons dĂ©tailler la mĂ©thode Ă  employer pour faire rĂ©fĂ©rence Ă  une occurrence qui a gĂ©nĂ©ralement Ă©tĂ© crĂ©Ă©e dynamiquement. Commençons par cet exemple : _root.attachMovie("balle", "balle_inst", 1); balle_inst._x = 50; balle_inst._y = 50; La premiĂšre ligne d’instruction a pour fonction de prendre dans la bibliothĂšque de l’animation, un symbole disponible dont le nom de liaison est balle et de le placer sur la scĂšne. L’occurrence obtenue est alors appelĂ©e balle_inst. Rappelons que le chiffre dĂ©termine le niveau, c’est-Ă -dire le plan de l’occurrence par rapport aux occurrences qui se trouvent et se trouveront sur la scĂšne. Si aucune autre occurrence n’occupe le niveau 1 (ou 0), celle-ci sera toujours en arriĂšre-plan des autres. Les deux lignes d’instructions qui suivent la premiĂšre que nous venons d’analyser, permettent de placer prĂ©cisĂ©ment l’occurrence obtenue. Dans cet exemple, il n’y a aucune difïŹcultĂ©, mais voyons Ă  prĂ©sent le cas oĂč plusieurs occurrences auraient Ă  ĂȘtres placĂ©es sur la scĂšne. Il n’est pas question de dupliquer ces trois lignes d’instructions autant de fois qu’il y a d’occurrences Ă  placer sur la scĂšne. Il faut donc employer une boucle. for (i=0; i<=10; i++) { _root.attachMovie("balle", "balle_inst"+i, i); _root["balle_inst"+i]._x = 15+i*35; _root["balle_inst"+i]._y = 50; } 19
  • 45. 150 scripts Livre Page 20 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Observez bien, la mĂ©thode attachMovie() est associĂ©e Ă  _root. Cela signiïŹe donc que les occurrences qui vont ĂȘtres obtenues seront placĂ©es sur la scĂšne. Si nous avions une occurrence dĂ©jĂ  prĂ©sente sur la scĂšne dont le nom serait tableauControle_inst, nous aurions pu saisir cette ligne d’instruction : tableauControle_inst.attachMovie("balle", "balle_inst"+i, i); Vous l’aurez compris, neuf exemples sur dix disponibles dans les publications traitant de l’ActionScript font gĂ©nĂ©ralement rĂ©fĂ©rence Ă  _root, mais ce n’est pas la seule solution. Dans ce cas, voici Ă  quoi devront ressembler les deux lignes qui suivent : tableauControle_inst ["balle_inst"+i]._x = 15+i*35; tableauControle_inst ["balle_inst"+i]._y = 50; Rappelons que les crochets symbolisent l’appartenance. Dans l’exemple suivant, janvier et fĂ©vrier sont bien des valeurs du tableau intitulĂ© mois. var mois = ["janvier","fĂ©vrier","mars","avril","mai","juin"] Si nous reprenons notre exemple ci-dessus, balle_inst est bien une occurrence de _root (ou de tableauControle_inst). C’est donc la seule solution pour faire rĂ©fĂ©rence par concatĂ©nation Ă  tous les noms des occurrences numĂ©rotĂ©es. Avez-vous dĂ©jĂ  nommĂ© une occurrence "balle_inst"+i dans la palette PropriĂ©tĂ©s ? Les guillemets et l’opĂ©rateur ne sont pas autorisĂ©s dans les noms d’occurrences et de variables ! Si vous saisissiez donc la ligne d’instruction suivante, la player Flash serait incapable de l’interprĂ©ter. "balle_inst"+i._x = 15+i*35; Cette erreur est facile Ă  comprendre Ă  partir du moment oĂč vous retiendrez que devant une propriĂ©tĂ© ou une mĂ©thode, seuls les noms d’instances (occurrences) ou de variables sont admis. Astuce Pour simpliïŹer votre script, nous aurions pu saisir les lignes d'instructions suivantes. for (i=0; i<=10; i++) { nelleOccur = _root.attachMovie("balle", "balle_inst"+i, i); nelleOccur._x = 15+i*35; nelleOccur._y = 50; } Pour ïŹnir, nous allons vous prĂ©senter une syntaxe dont l’avantage est qu’elle permet d’économiser plusieurs lignes de codes lorsque vous devez rĂ©gler les propriĂ©tĂ©s d’une occurrence placĂ©e sur la scĂšne avec les mĂ©thodes attachMovie() et duplicateMovieClip(). _root.attachMovie("carte", "carteFrance_inst", 1, {_alpha:60, _x:130, _y:60, _rotation:15}); et nomduneoccurrence.duplicateMovieClip("nomcopie", 2, {_alpha:60, _x:130, _y:250, ➄_rotation:15}); 20
  • 46. 150 scripts Livre Page 21 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction ‱ Gestion des lignes d’instructions contenues dans une boucle for() ‱ Pourquoi est-il nĂ©cessaire d’apporter un complĂ©ment d’informations sur les boucles que vous connaissez sĂ»rement ? L’ActionScript vous propose de dĂ©ïŹnir les scripts associĂ©s Ă  une occurrence crĂ©Ă©e dynamiquement, mais cela peut poser un problĂšme. Prenons l’exemple suivant : for (i=0; i<=10; i++) { _root.attachMovie("photo", "photo"+i, i); _root["photo"+i]._x = 30+i*50; _root["photo"+i]._y = 50; _root["photo"+i].onPress = function() { nomDeLaPhoto = this._name; }; } Si vous lancez une animation contenant ce script, toutes les lignes d’instructions ci-dessus ont Ă©tĂ© exĂ©cutĂ©es Ă  l’exception de celle qui se trouve dans le gestionnaire onPress. Cette ligne ne va s’exĂ©cuter qu’au moment oĂč l’utilisateur cliquera sur une photo. nomDeLaPhoto = this._name Dans le texte dynamique qui se trouve sur la scĂšne, celui dont le nom de variable est nomDeLaPhoto, le nom de l’occurrence sur laquelle l’utilisateur va cliquer va s’inscrire. this._name est une information relative Ă  l’occurrence, celle qui contient cette ligne d’instruction. Cette occurrence prĂ©cisĂ©ment. Rappelons que « celle » ou « cette » se traduisent notamment en anglais par « this ». Le mot-clĂ© this fait donc rĂ©fĂ©rence au nom de l’instance qui se trouve devant le gestionnaire dans lequel il se trouve. _root["photo"+i].onPress = function() { nomDeLaPhoto = this._alpha-=5; }; Le script ci-dessus signiïŹe qu’à chaque clic sur l’occurrence Ă  laquelle est rattachĂ©e ce script (pa exemple, photo3 si i vaut 3), cette mĂȘme occurrence va devenir de plus en plus transparente. Figure I-3 Le mot-clĂ© this fait bien rĂ©fĂ©rence au nom de l'occurrence qui se trouve devant le gestionnaire d'Ă©vĂ©nement. 21
  • 47. 150 scripts Livre Page 22 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 Maintenant, essayons de comprendre pourquoi le script suivant renvoie toujours la mĂȘme valeur et notamment souvent une erreur. photosDeClasse = ["Marine", "Marjorie", "David", "Pat", "Sandy", "Manon"]; for (i=0; i<6; i++) { _root.attachMovie("photo", "photo"+i, i); _root["photo"+i]._x = 30+i*50; _root["photo"+i]._y = 50; _root["photo"+i].onPress = function() { nomDeLaPhoto = photosDeClasse[i]; }; } La premiĂšre question que nous vous poserons est : en combien de millisecondes s’exĂ©cute cette boucle ? La rĂ©ponse est simple, mais surtout logique : moins d’une fraction de seconde, car c’est ce qui caractĂ©rise le principe des boucles for() et while(). Ajoutons et prĂ©cisons qu’à la ïŹn de l’exĂ©cution de la boucle, i vaut 6. Vous n’allez pouvoir cliquer sur une occurrence qu’à la ïŹn de la boucle qui sera de toutes les façons plus rapide que vous. Au moment oĂč vous cliquerez sur une occurrence, i vaudra donc dĂ©jĂ  6 ! La ligne d’instruction suivante s’était exĂ©cutĂ©e au moment de la boucle. _root["photo"+i].onPress = function() { À ce moment-lĂ , i valait une valeur trĂšs prĂ©cise. Imaginons qu’il s’agissait de 3, dans ce cas, lorsque vous cliquez sur l’occurrence intitulĂ©e photo3, la ligne d’instruction contenue dans son gestionnaire s’exĂ©cute. Souvenez-vous qu’au moment oĂč vous allez cliquer sur une des photos, i vaut 6. Alors que peut vous renvoyer la ligne d’instruction suivante ? nomDeLaPhoto = photosDeClasse[6]; Une erreur ! En effet, l’entrĂ©e numĂ©ro 6 n’existe pas. La premiĂšre entrĂ©e du tableau porte le numĂ©ro d’index 0 et la derniĂšre le numĂ©ro 5. Attention, le problĂšme n’est pas celui de l’entrĂ©e qui n’existe pas. Nous pourrions avoir dix entrĂ©es dans notre tableau, alors un clic sur toutes les photos renverrait tout de mĂȘme la valeur de la sixiĂšme entrĂ©e du tableau. Dans ce cas, comment faire pour obtenir la troisiĂšme entrĂ©e du tableau au moment du clic sur la photo intitulĂ©e photo3 ? Pour commencer, n’oubliez pas que la premiĂšre entrĂ©e d’un tableau porte l’index 0. Donc nous n’allons pas cliquer sur l’occurrence photo3 pour obtenir la troisiĂšme entrĂ©e du tableau, mais sur l’occurrence photo2. Comme il existe une occurrence intitulĂ©e photo0, photo2 est bien la troisiĂšme occurrence. Ce problĂšme de dĂ©calage ne surviendra que dans les cas oĂč vous travaillerez avec des tableaux. Reprenons, il ne s’agissait que d’un dĂ©tail minime par rapport Ă  notre problĂšme majeur. photosDeClasse = ["Marine", "Marjorie", "David", "Pat", "Sandy", "Manon"]; for (i=0; i<6; i++) { _root.attachMovie("photo", "photo"+i, i); 22
  • 48. 150 scripts Livre Page 23 Lundi, 20. ao t 2007 7:29 07 Se prĂ©parer Ă  la lecture de l’ouvrage Introduction _root["photo"+i]._x = 30+i*50; _root["photo"+i]._y = 50; _root["photo"+i].sonNumero = i; _root["photo"+i].onPress = function() { nomDeLaPhoto = photosDeClasse[this.sonNumero]; }; } Rappelons que dans le script ci-dessus, toutes les lignes d’instructions s’exĂ©cutent au moment de la boucle Ă  l’exception de la ligne qui est contenue dans le gestionnaire onPress. Si vous avez bien observĂ©, nous avons ajoutĂ© une nouvelle ligne : _root["photo"+i].sonNumero = i; Au moment de la boucle, nous avons associĂ© Ă  chaque occurrence, une variable intitulĂ©e sonNumero qui a pris pour valeur celle de i, donc diffĂ©rente et propre Ă  chaque occurrence. L’occurrence intitulĂ©e photo4 contient une variable intitulĂ©e sonNumero qui vaut 4. Ne peut-on donc pas dire que la variable qui vaut 2, c’est celle de l’occurrence qui s’appelle photo2 ? Si nous pouvions traduire celle par this et rĂ©ciproquement, voilĂ  ce que nous obtiendrions dans notre script. photo4.onPress = function() { nomDeLaPhoto = photosDeClasse[this.sonNumero]; }; ou aussi photo4.onPress = function() { nomDeLaPhoto = photosDeClasse[cette occurrence sur laquelle je clique.sonNumero]; }; Vous l’aurez compris, dĂšs que vous dĂ©ïŹnissez un gestionnaire onPress dans une boucle for(), vous ne pouvez pas faire rĂ©fĂ©rence Ă  la variable locale (i dans notre exemple), car elle renvoie toujours la mĂȘme valeur. Vous devez donc associer une variable Ă  chaque occurrence. Astuce Une technique consiste Ă  rĂ©cupĂ©rer le numĂ©ro ïŹgurant dans le nom pour l’utiliser comme valeur. L’exemple suivant vous en fait la dĂ©monstration. photo4.onPress = function() { numero = this._name.substr(5, 1); trace(numero); }; 23
  • 49. 150 scripts Livre Page 24 Lundi, 20. ao t 2007 7:29 07 150 scripts pour Flash CS3 ‱ ‱ Le sens du mot-clĂ© this selon les contextes Si vous avez lu les trois explications prĂ©cĂ©dentes de ce chapitre, nous avons Ă©voquĂ© le sens de ce mot-clĂ©, vous en savez donc sĂ»rement un peu plus. Mais selon sa position dans un script, que signiïŹe ce mot-clĂ© ? Partons de l’exemple suivant : this._rotation = 180 ; ‱ Cette ligne d’instruction se trouve sur la premiĂšre image-clĂ© de la timeline principale de votre animation. Lorsque vous tenterez de lire cette derniĂšre dans la page d’un navigateur ou dans un projecteur, toute la scĂšne s’afïŹchera Ă  l’envers, une rotation de 180˚ ayant Ă©tĂ© appliquĂ©e avant l’afïŹchage des Ă©lĂ©ments qui la composent. ‱ À prĂ©sent, imaginons qu’elle se trouve sur la premiĂšre image-clĂ© de la timeline d’une animation (un ïŹchier SWF) que vous chargez par le biais de la commande loadMovieNum(). La scĂšne de votre animation principale ne va pas bouger ; en revanche, l’animation chargĂ©e va s’afïŹcher Ă  l’envers (retournĂ©e de 180˚). ‱ Pour ïŹnir, imaginons qu’elle se trouve sur la premiĂšre image-clĂ© de la timeline d’un clip. Lorsque vous placerez ce clip sur la scĂšne, l’occurrence issue de ce symbole s’afïŹchera sur la scĂšne retournĂ©e Ă  180˚. Prenons d’autres exemples
 personnage.onPress = function() { this._rotation += 5; }; this fait rĂ©fĂ©rence au nom de l’occurrence qui se trouve devant le gestionnaire, c’est-Ă dire personnage. decor.onEnterFrame = function() { this._x += 5; }; this fait rĂ©fĂ©rence au nom de l’occurrence qui se trouve devant le gestionnaire, c’est-Ă -dire decor. _root._alpha = 0; _root.onEnterFrame = function() { this._alpha += 3; if (this._alpha>=100) { delete this.onEnterFrame; } }; Rappelons que _root fait rĂ©fĂ©rence Ă  la scĂšne. Ainsi, la premiĂšre ligne d’instruction va plonger la scĂšne dans le noir (si la scĂšne est noire). Ce script a donc pour effet de rendre la scĂšne transparente, puis elle le devient de moins en moins. Lorsque son opacitĂ© dĂ©passe les 100 %, le gestionnaire est tout simplement dĂ©truit. 24
  • 50. 150 scripts Livre Page 25 Lundi, 20. ao t 2007 7:29 07 Partie I L’interface C’est le quotidien de la plupart des ïŹ‚ashers et dĂ©veloppeurs Flash. CrĂ©er un menu, le programmer pour qu’il se dĂ©roule, dĂ©placer une occurrence par drag & drop (ou glisser-dĂ©poser, en français), rĂ©aliser un panier, construire dynamiquement un Ă©cran, ce sont autant de tĂąches que vous pourriez ĂȘtre conduits Ă  mener pour un dĂ©veloppement. Ce chapitre met donc l’accent sur les techniques suivantes : ‱ l’optimisation d’une animation ; ‱ la crĂ©ation de menus et boutons ; ‱ la rĂ©alisation de variateurs ; ‱ la gestion d’un panier et des formulaires ; ‱ la gestion des effets de scrolls (menus et listes dĂ©roulants), des panoramiques et transitions ; ‱ la construction dynamique de l’interface ; ‱ le contrĂŽle du temps et de son afïŹchage ; ‱ le dĂ©placement de personnages et d’objets sur la scĂšne ; ‱ l’enregistrement de donnĂ©es dans des cookies et bases de donnĂ©es ; ‱ l’obtention d’informations relatives Ă  la scĂšne. Ces techniques sont toutes aussi importantes les unes que les autres, mais nous devons tout de mĂȘme mettre en avant le fait qu’il est primordial d’ĂȘtre capable de gĂ©rer du XML dans une animation Flash. C’est pourquoi nous avons trĂšs souvent utilisĂ© cette technologie dans nos Ă©tudes de cas. Par ailleurs, la construction d’une interface doit vraiment se faire dynamiquement. Il est une rĂšgle qu’il faut essayer de pousser au maximum de vos limites, placez et crĂ©ez tout dynamiquement sur la scĂšne, Ă©vitez de dĂ©poser vous-mĂȘme un symbole sur la zone de travail (il serait d’ailleurs impossible de le supprimer). Avant de vous lancer dans la lecture de ce livre, assurez-vous que vous comprenez bien les points abordĂ©s dans le chapitre prĂ©cĂ©dent.
  • 51. 150 scripts Livre Page 26 Lundi, 20. ao t 2007 7:29 07
  • 52. 150 scripts Livre Page 27 Lundi, 20. ao t 2007 7:29 07 1 Optimisation d’une animation Il est trĂšs facile de rĂ©aliser une animation, avec ou sans interpolation, contenant Ă©ventuellement du code, car des centaines de sites sur Internet vous proposent des tutoriaux pour vous aider Ă  faire vos premiers pas en Flash puis en ActionScript. Allez-vous respecter toutes les rĂšgles Ă©lĂ©mentaires qui ïŹgurent gĂ©nĂ©ralement dans les notes et autres remarques de l’aide ofïŹcielle de Macromedia Flash ? Sans avoir la prĂ©tention d’ĂȘtre exhaustif, nous allons mettre en avant certaines techniques qui vous permettront d’obtenir des animations/scripts optimisĂ©s, c’est-Ă -dire rapides Ă  l’exĂ©cution, pas trop lourds, faciles Ă  mettre Ă  jour, et respectant certaines conventions propres Ă  la programmation. Techniques d’optimisation d’une production en Flash Nous n’allons pas commencer par vous prĂ©senter une animation « optimisĂ©e », ni nous arrĂȘter sur des conseils relatifs Ă  la programmation en ActionScript, mais plutĂŽt vous Ă©numĂ©rer des rĂšgles qu’il est fortement conseillĂ© de suivre si vous voulez optimiser votre productivitĂ©, votre code et l’exĂ©cution de vos animations. Prise en main du logiciel ‱ DĂšs le dĂ©but de la crĂ©ation d’une animation, rĂ©glez sa cadence, c’est-Ă -dire la vitesse de dĂ©ïŹlement de la tĂȘte de lecture. Dans le menu ModiïŹcation>Document
, rĂ©glez le chiffre ïŹgurant Ă  droite de l’étiquette Cadence Ă  20 au minimum.
  • 53. 150 scripts Livre Page 28 Lundi, 20. ao t 2007 7:29 07 L’interface Partie I Nous vous conseillons de pousser cette valeur Ă  30. RĂ©glez Ă©galement la largeur, la hauteur et la couleur de la scĂšne. Cette derniĂšre pourra toujours ĂȘtre changĂ©e, mais il est dĂ©conseillĂ© de changer les dimensions d’une animation en cours de dĂ©veloppement. ‱ Puisque vous ĂȘtes dans cette fenĂȘtre PropriĂ©tĂ©s du document, proïŹtez-en pour rĂ©gler la cadence, la largeur, la hauteur et la couleur de la scĂšne de vos prochaines animations de façon dĂ©ïŹnitive. Cliquez simplement sur le bouton « Établir comme valeur par dĂ©faut ». ‱ Enregistrez votre animation avant mĂȘme de travailler dessus car dans certains cas, elle devra possĂ©der une identitĂ©, c’est-Ă -dire ĂȘtre physiquement prĂ©sente sur le disque dur de votre ordinateur sous forme de ïŹchier. ‱ DĂšs le premier lancement de Flash, conïŹgurez la disposition des palettes sur votre Ă©cran aïŹn de ne pas avoir Ă  les bouger continuellement, ce qui ralentirait votre productivitĂ©. Enregistrez alors cette disposition via le menu FenĂȘtre>Enregistrer la disposition des panneaux
 ‱ Ayez le rĂ©ïŹ‚exe d’utiliser les raccourcis prĂ©sentĂ©s ci-dessous. Il en existe de nombreux autres, c’est un minimum Ă  s’imposer pour optimiser sa productivitĂ©. Tableau 1-1 Raccourcis clavier Ă  connaĂźtre Raccourci RĂ©sultat F6 F7 CrĂ©er une image-clĂ© vide. F5 Ajouter des images. Si la tĂȘte de lecture se trouve avant la derniĂšre image d’un calque, le raccourci insĂšre des images aprĂšs l’image sĂ©lectionnĂ©e. Dans le cas contraire, des images sont ajoutĂ©es entre la ïŹn du calque et l’image sĂ©lectionnĂ©e. F8 Transformer une sĂ©lection en un Symbole. F9 AfïŹcher/Masquer la palette Action. La lettre V seule SĂ©lectionner l’outil FlĂšche noire (Outil SĂ©lection). Les lettres R et O SĂ©lectionner respectivement les outils Rectangle et Ovale. Ctrl + B Commande-B (Mac) Pour « casser » une occurrence et rĂ©cupĂ©rer son contenu. Dans le cas d’un texte, vous obtenez des lettres sĂ©parĂ©es. Une nouvelle exĂ©cution du raccourci transforme chaque lettre en forme vectorielle. Ctrl + EntrĂ©e Commande-EntrĂ©e (Mac) Permet de lire l’animation en plein Ă©cran (tout du moins sans les palettes). Ctrl + Shift + EntrĂ©e Commande + Shift + EntrĂ©e (Mac) Lancer l’animation en mode dĂ©bogage. Ctrl + K et Ctrl + I Commande + K et Commande + I (Mac) 28 CrĂ©er une image-clĂ© reprenant le contenu de la prĂ©cĂ©dente sur le mĂȘme calque. AfïŹcher respectivement les palettes Aligner et Info.