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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Problème avec preloader


Sujet :

ActionScript 3

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ....
    	}
    }

  2. #2
    Membre actif
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Problème avec mon preloader externe
    Par rbr_cdw dans le forum Flash
    Réponses: 0
    Dernier message: 24/01/2014, 11h18
  2. Problème avec le preloading d'images
    Par CptWacko dans le forum Flash
    Réponses: 0
    Dernier message: 30/11/2010, 21h39
  3. problème avec preloader
    Par chejuan dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 02/04/2008, 10h20
  4. [Débutant] problème de preload avec image
    Par arnofly dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 12/02/2008, 19h48
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo