Introduction▲
L'actionscript 3 ( as3 ) va vous permettre de charger des fichiers de façon plus simple et propre que dans les versions précédentes du langage. Ce cours est composé de trois parties :
- les classes dont nous aurons besoin pour tout chargement ;
- le chargement de fichiers destinés à être exploités ;
- le chargement de fichiers destinés à l'affichage.
I. Les classes génériques, indispensables pour charger des fichiers▲
Ces classes reviennent récursivement lors de chargement de fichiers en Action Script 3 et sont souvent indispensables. Il sera nécessaire de connaître par cœur certaines classes (la classe Event par exemple) si vous souhaitez travailler efficacement.
I-A. La classe flash.net.URLRequest▲
Cette classe est indispensable à tout chargement !
En action Script 3, nous ne pouvons plus charger un fichier uniquement à partir d'une url formatée en String, il nous faut passer par un objet URLRequest.
Son utilisation est très simple, il nous suffit de créer l'objet et d'y renseigner l'url du fichier en String :
var
adresse:
URLRequest =
new
URLRequest
(
"fichiers/exemple.xml"
);
Pour plus d'informations sur la classe URLRequest, vous pouvez lire la documentation officielle d'Adobe en vous rendant ici.
I-B. La classe flash.events.Event▲
Cette classe se révèle très souvent indispensable en Action Script 3, Dans notre cas nous l'utiliserons pour détecter les évènements du chargement tels que Event.COMPLETE.
Voici un tableau récapitulatif des principaux évènements relatifs aux chargements :
constantes |
définition |
---|---|
Event.COMPLETE |
se déclenche lorsque le chargement est terminé |
Event.UNLOAD |
se déclenche lorsque l'objet Loader est vidé de son contenu par la fonction unload() |
Event.INIT |
se déclenche lors de l'initialisation de l'objet Loader |
Event.CLOSE |
se déclenche lorsqu'un chargement est stoppé par la fonction close(); |
Event.OPEN |
se déclenche lorsqu'un chargement démarre avec la fonction load(); |
Pour plus d'informations sur la classe Event, vous pouvez lire la documentation officielle d'Adobe en vous rendant ici pour la classe Event.
I-C. La classe flash.events.IOErrorEvent▲
Pour capturer les erreurs de chargements, vous pouvez utiliser cette classe, et définir l'évènement IOErrorEvent.IO_ERROR sur votre objet de chargement. Si une erreur survient, la fonction jointe à l'évènement sera exécutée, et permettra d'en « capturer » les causes.
import
flash.
events.
IOErrorEvent;
import
flash.
net.
URLLoader;
import
flash.
net.
URLRequest;
var
loader:
URLLoader =
new
URLLoader (
);
loader.
addEventListener
(
IOErrorEvent.
IO_ERROR,
indiquerErreur);
loader.
load
(
new
URLRequest
(
"text.txt"
) );
function
indiquerErreur (
erreur:
Event ) {
trace
(
"Erreur lors du chargement : "
+
erreur );
}
Pour plus d'informations sur la classe IOErrorEvent, vous pouvez lire la documentation officielle d'Adobe en vous rendant ici.
II. Le chargement de fichiers de données▲
II-A. Définition▲
La classe flash.net.URLLoader sert à charger des fichiers tels que du texte, des fichiers xml, des pages web. Nous l'utiliserons pour accéder à des données dynamiquement dans notre swf.
II-B. Utilisation▲
Dans notre exemple, nous souhaitons charger un fichier xml, et récupérer son contenu.
Nous allons donc créer un objet URLLoader, et exécuter sa fonction load, en y spécifiant l'objet URLRequest contenant l'adresse du fichier. Ensuite, il faut ajouter à l'objet URLLoader un évènement Event.COMPLETE, qui déclenchera une fonction finDuChargement (par exemple) lorsque le fichier sera chargé.
Comment accéder aux données chargées ?
Dans la définition de la fonction que vous appellerez avec l'évènement Event.COMPLETE, il vous faut obligatoirement définir un objet de type Event en argument :
function
exemple (
event:
Event){
// le code ici
};
C'est grâce aux propriétés de cet objet que vous accéderez au contenu du fichier chargé, comme ceci :
function
exemple (
event:
Event){
var
donnees =
event.
target
.
data
;
trace
(
donnees);
};
la propriété target de l'objet Event transmis dans les arguments de la fonction exemple renvoie vers l'objet URLLoader de départ, ainsi, vous pouvez également accéder au contenu du fichier comme ceci :
import
flash.
net.
URLLoader;
import
flash.
net.
URLRequest;
import
flash.
events.
Event;
var
loader:
URLLoader =
new
URLLoader (
);
loader.
addEventListener
(
Event.
COMPLETE,
exemple);
loader.
load
(
new
URLRequest
(
"test.txt"
) );
function
exemple (
event:
Event){
var
donnees =
loader.
data
;
trace
(
donnees);
};
Tout de suite, voici un exemple simple de chargement de fichier de données : (également téléchargeable ici)
// nous importons les classes nécessaires :
import
flash.
events.
IOErrorEvent;
import
flash.
net.
URLLoader;
import
flash.
net.
URLRequest;
import
flash.
events.
Event;
import
flash.
events.
ProgressEvent;
// nous déclarons un objet URLLoader :
var
chargeur:
URLLoader =
new
URLLoader (
);
// nous créons un objet URLRequest qui contient l'url du fichier :
var
adresse:
URLRequest =
new
URLRequest (
"/fichier/exemple.xml"
);
// nous lançons le chargement du fichier, en indiquant l'adresse de celui-ci par l'objet URLRequest :
chargeur.
load
(
adresse);
// définition des évènements de l'objet chargeur
chargeur.
addEventListener
(
Event.
COMPLETE,
finDuChargement);
chargeur.
addEventListener
(
ProgressEvent.
PROGRESS,
avancement);
chargeur.
addEventListener
(
IOErrorEvent.
IO_ERROR,
indiquerErreur);
// définition de la fonction exécutée par l'évènement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function
finDuChargement (
event:
Event ) {
var
contenu =
event.
target
.
data
;
trace
(
"chargement fini ! "
+
contenu);
}
// définition de la fonction exécutée par l'évènement PROGRESS :
// déclenchée à chaque avancement du chargement )
function
avancement
(
event:
Event) {
trace
(
event.
bytesLoaded
+
" chargés sur "
+
event.
bytesTotal
);
}
// fonction indiquant si une erreur de chargement survient :
function
indiquerErreur
(
event:
Event ) {
trace
(
event);
}
Notez l'utilisation de l'évènement ProgressEvent.PROGRESS de la classe flash.events.ProgressEvent, qui permet de récupérer l'avancement du chargement du fichier en temps réel.
Pour plus d'informations sur la classe URLLoader, vous pouvez lire la documentation officielle d'Adobe en vous rendant ici.
II-C. Contrôler le type de données chargées▲
II-C-1. Définition▲
Nous allons voir ici la classe URLLoaderDataFormat. Elle nous permettra de définir le format des données que chargera notre objet URLLoader. Cette classe possède 3 constantes de type String, pour 3 types de données : TEXT = « text », BINARY = « binary », VARIABLES = « variables ».
constantes |
description |
---|---|
BINARY |
indique que les données chargées sont binaires. Ce type permet de charger entre autres des images et les stocker sous forme de tableau de bytes. |
TEXT |
indique que les données chargées sont du texte |
VARIABLES |
indique que les données chargées sont des variables |
Pour plus d'informations sur la classe URLLoaderDataFormat, vous pouvez lire la documentation officielle d'Adobe en vous rendant ici.
II-C-2. Utilisation▲
Pour informer à notre objet URLLoader le type des données qu'il va devoir charger, nous définissons sa propriété dataFormat.
import
flash.
net.
URLLoaderDataFormat;
import
flash.
net.
URLLoader;
// on définit une variable ayant pour valeur la constante TEXT de la classe URLLoaderDataFormat
var
formatDeDonnes:
String
=
URLLoaderDataFormat.
TEXT;
var
loader =
new
URLLoader (
);
var
url
=
new
URLRequest
(
"texte.txt"
);
// on accède et informe la propriété dataFormat de l'objet loader.
loader.
dataFormat =
formatDeDonnes;
loader.
load
(
url
);
III. Charger un fichier destiné à être affiché▲
III-A. Définition▲
La classe flash.display.Loader vous permettra de charger des fichiers tels que des SWF, JPF, GIF… Notez son emplacement dans le package flash.display et non le package flash.net comme la classe URLLoader.
Cela est dû au fait que la classe Loader hérite de la classe DisplayObjectContainer, et peut donc être affichée sur la scène avec le contenu qu'elle charge, comme on affiche un movieClip (un autre cours viendra compléter ces notions très prochainement).
III-B. Utilisation▲
Comment afficher le contenu de l'objet Loader sur la scène ?
Nous allons utiliser la nouvelle fonction addChild. En AS3, les objets graphiques ne sont par défaut pas affichés sur la Scene, pour les y afficher, il vous faut utiliser la fonction addChild. Nous ne nous étendrons pas sur ce sujet, qui fera l'objet d'un autre cours.
Dans notre cas, pour ajouter le contenu de l'objet Loader sur la scène, nous allons donc programmer :
stage.
addChild
(
loader);
Pour afficher le fichier chargé, contenu dans l'objet Loader.
Voici le code complet : (également téléchargeable ici)
// import des classes nécessaires :
import
flash.
events.
IOErrorEvent;
import
flash.
display.
Loader;
import
flash.
display.
LoaderInfo
import
flash.
net.
URLRequest;
import
flash.
events.
Event;
import
flash.
events.
ProgressEvent;
// déclaration de notre objet Loader
var
chargeur:
Loader =
new
Loader
(
);
chargeur.
load
(
new
URLRequest
(
"/fichier/exemple.jpg"
));
// on définit les évènements sur la propriété contentLoaderInfo de l'objet loader.
chargeur.
contentLoaderInfo.
addEventListener
(
Event.
COMPLETE,
finDuChargement);
chargeur.
contentLoaderInfo.
addEventListener
(
ProgressEvent.
PROGRESS,
avancement);
chargeur.
contentLoaderInfo.
addEventListener
(
IOErrorEvent.
IO_ERROR,
indiquerErreur);
// on affiche l'objet loader sur la scène :
stage.
addChild
(
chargeur);
// on définit la fonction finDuChargement, exécutée par l'évènement COMPLETE :
function
finDuChargement (
event:
Event ) {
trace
(
"Chargement terminé !"
);
}
function
avancement (
event:
Event ) {
trace
(
event.
bytesLoaded
+
" chargés sur "
+
event.
bytesTotal
);
}
// fonction indiquant si une erreur de chargement survient :
function
indiquerErreur
(
event:
Event ) {
trace
(
event);
}
Notez que les évènements ne doivent pas être définis directement sur l'objet Loader, mais sur sa propriété contentLoaderInfo ( retournant un objet LoaderInfo ) .
Cet exemple regroupe quelques notions expliquées dans le chapitre 2-Charger un fichier pour exploiter ses données. Vous pouvez ensuite décharger votre objet Loader pour libérer de la mémoire, pour cela utilisez la fonction unload() sur l'objet.
loader.
unload
(
);
Si vous souhaitez déclencher une fonction lors d'un unload d'objet Loader, notez l'existence de l'évènement Event.UNLOAD.
pour plus d'informations sur les classes Loader et LoaderInfo, vous pouvez lire la documentation officielle d'Adobe :
en vous rendant ici pour la classe Loader ;
en vous rendant ici pour la classe LoaderInfo.
III-C. La fonction Loader.loadBytes▲
III-C-1. Définition▲
La fonction loadBytes de la classe Loader va vous permettre de charger dans l'objet Loader des données binaires. Ces dernières pourront être obtenue avec la classe URLLoader par exemple, en informant sa propriété dataFormat avec la constante BINARY de la classe URLLoaderDataFormat ( voir chapitre 2-C ).
III-C-2. Utilisation▲
Nous allons prendre pour exemple un cas simple, imaginons que nous voulons garder une image en cache, puis l'afficher dans un objet Loader. La première étape est de charger l'image avec URLLoader, en prenant soin de préciser le type BINARY. Nous chargerons ensuite les données de l'objet URLLoader avec la fonction loadBytes de la classe Loader.
Voici un exemple de code (également téléchargeable ici)
// import des classes nécessaires :
// nous importons les classes nécessaires :
import
flash.
net.
URLLoader;
import
flash.
net.
URLRequest;
import
flash.
net.
URLLoaderDataFormat;
import
flash.
display.
Loader;
import
flash.
display.
LoaderInfo;
import
flash.
events.
Event;
import
flash.
events.
ProgressEvent;
import
flash.
events.
IOErrorEvent;
// nous déclarons un objet URLLoader :
var
chargeur:
URLLoader =
new
URLLoader (
);
// nous créons un objet URLRequest qui contient l'url du fichier :
var
adresse:
URLRequest =
new
URLRequest (
"image.jpg"
);
var
format =
URLLoaderDataFormat.
BINARY;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui-ci par l'objet URLRequest :
chargeur.
dataFormat =
format;
chargeur.
load
(
adresse);
// définition des évènements de l'objet chargeur
chargeur.
addEventListener
(
Event.
COMPLETE,
finDuChargement);
chargeur.
addEventListener
(
ProgressEvent.
PROGRESS,
avancement);
chargeur.
addEventListener
(
IOErrorEvent.
IO_ERROR,
indiquerErreur);
// définition de la fonction exécutée par l'évènement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function
finDuChargement (
event:
Event ) {
var
contenu =
event.
target
.
data
;
creerLoader (
contenu);
}
// fonction déclenchée à la fin du chargement URLLoader, qui ajoute un Loader sur la scène :
function
creerLoader (
datas ) {
var
chargeur:
Loader =
new
Loader
(
);
chargeur.
loadBytes
(
datas);
stage.
addChild
(
chargeur);
}
// définition de la fonction exécutée par l'évènement PROGRESS :
// déclenchée à chaque avancement du chargement )
function
avancement
(
event:
Event) {
trace
(
event.
bytesLoaded
+
" chargés sur "
+
event.
bytesTotal
);
}
// fonction indiquant si une erreur de chargement survient :
function
indiquerErreur
(
event:
Event ) {
trace
(
event);
}
IV. Conclusion▲
Ce cours touche à sa fin. Il est probable que je le complète ou le modifie prochainement, avec la sortie de flash CS3.
Pour toute remarque, suggestion, correction, n'hésitez pas à me joindre en cliquant ici.