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 1 & ActionScript 2 Discussion :

Script trop lourd pour flash


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Script trop lourd pour flash
    Bonjour,

    J'ai realisé un script un peu lourd qui demande à flash de combiner des Array entre eux et de m'en sortir une trace. Tout cela avec les boucles while.
    Mon script fonctionne mais devant l'etendue de la tâche, au bout de quelques secondes de calcul, flash me lance ce message : "A script in this movie is causing flah player to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort ?"

    Serait-il possible de trafiquer quelque chose pour que flash fasse son calcul dans son coin (même si il doit y mettre la nuit) sans interrompre le travail ? ou, de scinder la tâche ?

    Voici à quoi ressemble mon code

    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
    var list1p:Array = ["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"]; //o
    var list2p:Array = ["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"]; //n
    var list3p:Array = ["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"]; //p
    var list4p:Array = ["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"]; //i
    var list5p:Array = ["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"];; //j
     
    var o = 0;
    var n = 0;
    var p = 0;
    var i = 0;
    var j = 0;
    var LResult:Array = new Array();
     
    while (o < 30)
    {
    	while (n < 30)
    	{
    		while (p < 30)
    		{
     
    			while (i < 30)
    			{
    				while (j < 30)
    				{
    					compteur++
    					LResult.push(list1p[o]+list2p[n]+list3p[p]+list4p[i]+list5p[j]);
    					j++;
    				}
    				i++;
    				j = 0;
     
    			}
     
    			p++;
    			i = 0;
     
    		}
    		n++;
    		p = 0;
    	}
    	o++;
    	n = 0;
    }
     
    trace(LResult);
    stop();

  2. #2
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut
    Pour effectuer un calcule qui ne bloque pas la machine, il faut asynchroniser la tâche. C'est une technique de programmation qui n'est pas évidente à maîtriser...

    Pour t'aider, je te proposerais de ne pas utiliser des boucles while. Mais de programmer une méthode en "enterFrame", qui à chaque frame effectue une centaine de calcul. A la fin de la frame, les compteurs sont incrémentés, et la suite du calcul se fera sur la frame suivante avec les nouvelles valeurs de compteurs.

    Je code à l'arrache un petit exemple avec une addition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = 0;
    b = 0;
     
    onEnterFrame = frame;
     
    function frame() {
    	trace("------------- frame ------------");
    	while (a<10) {trace(a+b); a++}
    	a = 0;
    	b++;
    }
    ici, tu effectues seulement 10 additions par frame, et la bécane peut faire une très longue liste en tâche de fond.
    A toi de reconstruire ton calcul selon cet exemple.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2015, 21h41
  2. Une requête trop lourde pour un site internet
    Par buggen25 dans le forum Requêtes
    Réponses: 0
    Dernier message: 16/09/2013, 12h35
  3. un swf dans un swf trop lourd pour le processeur
    Par yuyuboy dans le forum Intégration
    Réponses: 0
    Dernier message: 04/03/2010, 10h45
  4. Réponses: 11
    Dernier message: 22/03/2005, 01h04

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