Introduction

L'actionscript 3 ( as3 ) vas 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ées.
- Le chargement de fichiers destinés à l'affichage.

1. 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 coeur certaines classes ( la classe Event par exemple ) si vous souhaitez travailler efficacement.

1-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 :

 
Sélectionnez

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

1-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

1-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é, et permettra d'en "capturer" les causes.

 
Sélectionnez

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

2. Le chargement de fichiers de données

2-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.

2-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 :

 
Sélectionnez

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 :

 
Sélectionnez

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 :

 
Sélectionnez

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 )

 
Sélectionnez

// nous importons les classes necessaires :
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 évenements 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 finit ! "+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 chargmement 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écuperer 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

2-C. Contrôler le type de données chargées

2-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ée sont binaires. Ce type permet de charger entre autres des images et les stoquer sous forme de tableau de bytes.
TEXT indique que les données chargée 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

2-C-2. Utilisation

Pour informer à notre objet URLLoader le type des données qu'il vas devoir charger, nous définissons sa propriété dataFormat.

 
Sélectionnez

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);

3. Charger un fichier destiné à être affiché

3-A. Definition

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 completer ces notions très prochainement ).

3-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 :

 
Sélectionnez

stage.addChild(loader);

Pour afficher le fichier chargé, contenu dans l'objet Loader.

Voici le code complet : ( également téléchargeable ici )

 
Sélectionnez

// import des classes necessaires :
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 évenements 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 scene :
stage.addChild(chargeur);

// on définit la fonction finDuChargement, executée par l'évenement 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 chargmement 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.

 
Sélectionnez

loader.unload();

Si vous souhaitez déclencher une fonction lors d'un unload d'objet Loader, notez l'existence de l'évenement Event.UNLOAD.

pour plus d'informations sur les classes Loader et LoaderInfo, vous pouvez lire la documentation officiel d'Adobe :
en vous rendant ici pour la classe Loader
en vous rendant ici pour la classe LoaderInfo

3-C. La fonction Loader.loadBytes

3-C-1. Définition

La fonction loadBytes de la classe Loader vas vous permettre de charger dans l'objet Loader des données binaires. Ces dernière 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 ).

3-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 )

 
Sélectionnez


// import des classes nécessaires :
// nous importons les classes necessaires :
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 évenements 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 éxecutée par l'évenement 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 scene :
function creerLoader ( datas ) {
		var chargeur:Loader = new Loader();
		chargeur.loadBytes(datas);
		stage.addChild(chargeur);
}

// définition de la fonction éxecutée par l'évenement 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 chargmement survient :
function indiquerErreur( event:Event ) {
	trace(event);
}
	

4. Conclusion

Ce cours touche à sa fin. Il est probable que je le complete ou le modifie prochainement, avec la sortie de flash CS3.
Pour toute remarque, suggestion, correction, n'hésitez pas à me joindre en cliquant ici.