Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/04/2011, 16h28   #1
Invité de passage
 
Inscription : novembre 2003
Messages : 10
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 10
Points : 2
Points : 2
Par défaut Problème avec preloader

Bonjour,

Je charge un fichier texte plus de 20Mo peut aller jusqu’à des centaines de milliers de ligne
J’ai une méthode traitement() qui prend plus de 20sec
Au fait, elle traite chaque ligne d’un tableau il y a des calcules, des répartitions dans d’autres tableaux puis affichage des données dan un dataGrid.
Je souhaite mettre un preloader (MovieClip) au début jusqu'à la fin du traitement de cette fonction

Jai fait un truc comme ça mais il ne fonctionne pas très bien:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
preloader.gotoAndPlay(1);
function traitement() {
 
	preloader.visible=true;
 
	var i:int;
	for (i = 0; i < Tableau.length; i++) {
 
		traitement ….
}
 
preloader.visible=false;
 
}
Est-il possible d’attacher un Evenement exemple OnComplete ou OnProgress à cette fonction ??

codialement

voila le code de mon apli. sans le détail du traitement.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
 
import flash.net.FileReference;
//
var data:ByteArray;
var fileReference:FileReference;
var mFileReference:FileReference;
//
var Tableau:Array = new Array();
//
var ATableau:Array = new Array();
var BTableau:Array = new Array();
var CTableau:Array = new Array();
var HTableau:Array = new Array();
var MTableau:Array = new Array();
var PTableau:Array = new Array();
//
var VTableau:Array = new Array();
//
preloader.gotoAndPlay(1);
preloader.visible=false;
 
ouvreFichierBtn.addEventListener(MouseEvent.CLICK, ouvreExplorer);
 
// Cette fonction est appelée quand j'appuis sur le bouton
function ouvreExplorer(event:MouseEvent):void {
	trace("ouvreExplorer");
	mFileReference=new FileReference();
	mFileReference.addEventListener(Event.SELECT, selectFichier);
	var swfTypeFilter:FileFilter=new FileFilter("Text Files","*.txt");
	var allTypeFilter:FileFilter=new FileFilter("All Files (*.*)","*.*");
	mFileReference.browse([swfTypeFilter, allTypeFilter]);
}
// Cette fonction est appelée quand l'utilisateur selectionne un ficher dans la fenetre explorer
function selectFichier(event:Event):void {
	trace("le fichier est selectionné");
	// Event dans le cas ou le chargement est bien passer
	mFileReference.addEventListener(Event.COMPLETE, FinChargement);
	// Event dans le cas ou il y a erreur de chargement
	mFileReference.addEventListener(IOErrorEvent.IO_ERROR, ErreurChargement);
	// Event de chargement pour le progresse Bare
	mFileReference.addEventListener(ProgressEvent.PROGRESS, onProgress);
	// demande a FileRefence de charger le fichier
	mFileReference.load();
	// Affiche progress bar
	preloader.visible=true;
	ouvreFichierBtn.visible=false;
}
// Cette fonction affiche la progression du vhargement du fichier dans progress
function onProgress(event:ProgressEvent):void {
	if (event.bytesTotal==event.bytesLoaded) {
 
		trace("charger");
		preloader.visible=false;
	} else {
		//je ne fait rien;
	}
}
// Cette fonction est appelée après que le fichier est loadé
function FinChargement(event:Event):void {
	fileReference=event.target as FileReference;
	trace(" fichier :   "+(event.target.name));
	// Cette partie hape les données dans data puis chaque ligne dans le tableau      
	// Initialiser(vider) le tableau  utiliser array.length = 0 est plus rapide est perfermant que array.splice(0,array.length);                                                              
	//Tableau.splice(0,Tableau.length);
	Tableau.length=0;
	data=fileReference["data"];
	Tableau=(fileReference["data"].toString()).split("\n");
	trace("Nombre de ligne :  "+(Tableau.length));
	//trace(Tableau[1]);
	traitement();
 
	trace("le fichier est completement charger");
}
//
function ErreurChargement(event:Event):void {
	// Cache progress bar
	preloader.visible=false;
	ouvreFichierBtn.visible=true;
 
	trace("erreur");
}
//
function traitement() {
	var i:int;
	for (i = 0; i < Tableau.length; i++) {
 
		//ici mon traitement ....
	}
}
mebarkia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 07h08   #2
Membre du Club
 
Inscription : avril 2011
Messages : 58
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 58
Points : 56
Points : 56
Pour commencer il faut que tu remplace "charger" par "chargé" dans les lignes 53 et 73. Les deux mots n'ont pas le même sens, l'un est une action l'autre un état.

Ensuite faudrait que tu explique ce qui ne marche pas.

Je pense que si tu traite 20Mo de données, ton anim va bloquer. Flash vérifie que le script ne prenne pas trop de temps à s'executer, sinon il affiche la fameuse fenêtre "un script bloque cette animation....". Fais attention, si ca ne bloque aps chez toi parceque tu as un gros PC, ca peut bloquer chez un client. Il faut que tu fasse ton traitement sur plusieurs images, comme ceci (écrit à la volée):

Code :
1
2
3
4
5
6
7
8
9
10
11
 
un_clip.addEventListener(Event.ENTER_FRAME, traitementOnFrame);
var index:int=0;
 
function traitementOnFrame(){
        var i:int;
	for (i = 0; (i < 200) &&(index<Tableau.length); i++,index++) {
 
		traitement en utilisant index au lieu de i...
        }
}
ce dode traite des paquets de 200 lignes à chaque image.
bokan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h40.


 
 
 
 
Partenaires

Hébergement Web