[AS3] Fonction destinée à charger un fichier

[Fermé]
Signaler
-
Bonjour,


J'ai suivi un tutorial pour apprendre à charger un fichier externe sous Flash (en l'occurrence, il s'agit d'un fichier XML).

Je souhaiterais créer une fonction qui me permette de charger n'importe quel fichier, avec en paramètres : l'adresse de ce fichier et le type de format de données (pour l'instant, je n'ai pas intégré ce dernier paramètre).

Ainsi, je pourrai charger une image très simplement, de la manière suivante :

var monImage = fileLoader("Dossier/mon_image.jpeg",BINARY)


J'ai donc crée ma fonction à partir de mon script initial mais je me suis heurté à un petit problème.

Je retournais le contenu du fichier chargé à ma variable en utilisant un return de la manière suivante : return loader.data.

Or, la fonction ne me retournait rien car le fichier n'était pas complètement chargé dans le loader au moment du return.

D'où la nécessité d'utiliser un Event.COMPLETE sur le loader pour lancer une fonction une fois le chargement terminé. Et c'est là que les choses se compliquent. :)

Car avec cette méthode, je ne plus opérer de return sur ma variable.
De même, je rencontre un autre problème si je souhaite charger deux fichiers successivement.

Par exemple :

var monImage = fileLoader("Dossier/mon_image.jpeg")
var monImage2 = fileLoader("Dossier/mon_image2.jpeg")

La seconde variable modifie le loader alors que le premier n'a pas terminé d'être chargé.

Je voulais donc interrompre ma fonction, en attendant que l'event.COMPLETE me renvoie un booléen, nécessaire pour continuer l'exécution de la fonction et envoyer le contenu avec le return. Là encore, je n'ai pas trouvé de méthode propre pour mettre mon script en "pause". L'utilisation d'écouteurs d'évènements posant des problèmes.

J'ai joint mon dernier essai. Il exploite un tableau dans lequel je stocke mes loaders pour éviter qu'ils ne soient écrasés.

Le problème, c'est que je n'arrive pas à envoyer le contenu du fichier à la variable à laquelle il correspond (puisque je ne peux même pas les stocker dans un tableau).

Bref, je sèche un peu ... ^^

Sachant que la difficulté consiste à créer une seule et unique fonction permettant de charger le fichier dans la variable (à partir de son adresse), sans devoir intégrer cette variable ailleurs dans le script.


Merci d'avance à ceux qui répondront à ce long message ! :)


P.S. : Je suis un débutant. :)

// Importation des classes utiles :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.display.Loader;
import flash.display.LoaderInfo

// Ce tableau permet de contenir plusieurs chargeurs simultannément
var arrayLoader=[]

// cette variable sert à créer de nouvelles itérations de chargeur dans le tableau arrayLoader
var increment = 0

// Cette fonction de charger un fichier XML
function XMLloading (file:String)

{

// Création de l'objet URLLoader :
arrayLoader[increment]=new URLLoader ();

// Création de l'objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest (file);

// Création de la variable correspondant au format de données chargées via le XML :
var formatDeDonnees:String = URLLoaderDataFormat.TEXT;

// Spécification de la propriété dataFormat de l'objet loader :
arrayLoader[increment].dataFormat = formatDeDonnees;

// Chargement du fichier correspondant à l'adresse indiquée :
arrayLoader[increment].load(adresse);

// Evènements liés au chargement :
arrayLoader[increment].addEventListener(ProgressEvent.PROGRESS, progression);
arrayLoader[increment].addEventListener(IOErrorEvent.IO_ERROR, showError);
arrayLoader[increment].addEventListener(Event.COMPLETE, endLoading);

// On incrémente la variable pour le prochain chargeur
increment ++
}

// Fonction exécutée à la fin du chargement de tous les fichiers :
function endLoading (pEvent)
{
	trace("chargement terminé ! ");
	//ParagraphsContent=pEvent.target.data
	trace(ParagraphsContent)
	pEvent.target.removeEventListener(ProgressEvent.PROGRESS, progression);
	pEvent.target.removeEventListener(IOErrorEvent.IO_ERROR, showError);
	pEvent.target.removeEventListener(Event.ENTER_FRAME, endLoading);
}

// Fonction exécutée pendant le chargement :
function progression(pEvent)
{
	trace(pEvent.target.bytesLoaded+" chargés sur "+pEvent.target.bytesTotal);
}

// Fonction indiquant si une éventuelle erreur de chargmement :
function showError(pEvent)
{
	trace(pEvent);
}

// Je lance la fonction de chargement sur ma variable pour qu'elle récupère le contenu du chargement
var ParagraphsContent = XMLloading ("Paragraphs.xml")
var ObjectsContent = XMLloading ("Objects.xml")

trace(ParagraphsContent)
trace(ObjectsContent)

// Une fois tous les fichiers chargés, on passe au jeu :
stage.addEventListener(Event.ENTER_FRAME, nextpage)
function nextpage (pEvent)
{
if(ParagraphsContent != undefined)
{
gotoAndStop("game")
trace ("suivant")
}
if(ParagraphsContent == undefined)
{
trace ("rien")
}
}