IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Chargement de fichier en ActionScript 3

Découvrez rapidement et simplement comment charger des fichiers en action script 3, qu'ils soient destinés à un affichage ou à une exploitation de données dynamiques. La version alpha de Flash 9 ou Flex est requis pour réaliser les exemples de ce cours. ♪

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

 
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.

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.

 
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.

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 :

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

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

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 :

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

 
Sélectionnez
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)

 
Sélectionnez
// 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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.