Optimisation du code AS

cs_Limack Messages postés 89 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 23 décembre 2011 - 4 août 2008 à 12:59
cs_Limack Messages postés 89 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 23 décembre 2011 - 6 août 2008 à 20:24
Bonjour les amis(es)

J'ai un problème pour un long code que j'ai écrit : l'erreur envoyée par flash est la suivante (Un script de cette animation ralentit l'exécution de flash player. Si l'exécution n'est pas suspendue, il est possible que votre ordinateur ne réagisse plus)

Dites-moi comment faire alors que le code n'est pas une boucle infinie. c'est vraiment urgent pour moi.
Voilà un extrait du code :
switch (ntheme) {
case 0 :
#include "as/Themes/theme1.as"
break;
case 1 :
#include "as/Themes/theme2.as"
break;
case 2 :
#include "as/Themes/theme3.as"
break;
case 3 :
#include "as/Themes/theme4.as"
break;
...
...
...
...
case 75 :
#include "as/Themes/theme74.as"
break;
}

Merci de me repondre très rapidement !

6 réponses

fguitton Messages postés 396 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 novembre 2009 1
4 août 2008 à 23:08
Bonjour,

Afin que la réponse fournie dans le message privé que j'ai envoyer puisse servir a tout le monde, je la post également ici.
Pour répondre donc à la question, un code comme celui-ci ne fonctionnera jamais et il est impossible d'écrire quoi que se soit permettant de faire fonctione quel code qu'il soit de ce genre.

Je m'explique:
#include n'est pas une méthode, mais une directive, cela signifie que son action n'est valable que lors de la compilation du code c'est a dire que la directive #include va copier le code du fichier cible et s'autoremplacer par cette copie.
Or ici il y a référence des une instance dynamique de type switch qui sa entrer en jeu lors de l'exécution du code cette fois-ci ( et si on suit le raisonnement à l'exécution du code include aura completment disparu depuis bien longtemps de la source de votre animation )

L'effet qui est donc recherché ne doit pas se coder de cette façon, il faudrais savoir exactement ce qui est recherché exactement pour fournir une réponse plus précise et surtout plus utile, moins informative uniquement.

@+
Bon Code
Florian
0
cs_Limack Messages postés 89 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 23 décembre 2011
5 août 2008 à 11:20
Bonjour cher ami !

Comme tu l'as dit #include n'est pas une méthode, mais une directive, tout a fait OK. Mais en disant que ce code ne peut pas marcher ça m'étonne un peu dans la mésure où tout le contenu du AS est copié dans le FLA donc il cherchera simplement au moment de l'exécution la variable ntheme vérifiant la condition spécifiée et comme le code était déjà copié donc exécute ce bloc vérifiant la condition.
A moins que flash ait une limite dans le code, ou bien il faut pas dépasser un certain nombre de lignes dans le code, cela m'étonnerait puisque la mise en mémoire du code dépend normalement de la capacité de la MC du PC.
Sinon, j'avais déjà fait un truc du genre dans le passéc et ça marchait mais seulement que dans mon switch il y'a seulement 26 conditions. Mais quand j'ai augmenté le nombre de conditions qu'il a commencé à envoyer des erreurs de ce genre.
Il me semble que j'ai un problème d'optimisation.

Merci de me repondre !
0
fguitton Messages postés 396 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 novembre 2009 1
5 août 2008 à 21:56
Bonjour,

Alors autant pour moi, j'avais les yeux bien loin des trous hier soir pour écrire ca je pense.
Enfin pour les évtentuel visiteur, ce que j'ai dis reste vrai tout de même.
Oui donc je n'avais pas pris le problème dans le bon sens.
Alors suite aux multiple tests que j'ai fais, j'ai pu constater qu'il n'y avait aucun problème pour moi lors de la compression de l'animation. Néanmoins j'ai ajouté un paramètre switch de défaut vide :

default :
break;

Sans plus d'information je penserais que l'erreur est produite par une autre parti de ton code, d'un des fichier AS que tu charge ou encore tous simplement du manque de ressources de ton ordinateur pour compresser l'animation ( j'ai déjà vu de tel erreur se produire, malgré l'incongru de la chose ).

Excuse moi encore pour mon espèce de ratatinage et aussi pour le retard à répondre, je suis assez pris en ce moment.
Si tu evux tu pense m'envoyer comme je le disais tes fichiers source que je puisse regarder l'ensemble et voir ou est ce que cela clocherais. ( A l'adresse fournie dans mon préécdent message privé )

@+
Bon code
Florian
0
cs_Limack Messages postés 89 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 23 décembre 2011
6 août 2008 à 15:21
Non l'ordi que j'utilise est puissant, il n'a pas ce genre de problème !
Au fait j'ai parcouru tous les code AS, mais "aucune erreur détectée dans ce script".
Néanmoins j'ai touvé une solution qui ne marche toujours pas...
il m'envoie l'erreur suivante : (Cible introuvable : Cible="0" Base="_level0")
Ce que je constate est que si le ntheme choisi est compris entre 0 et 25 alors il charge le bloc "case" concerné en mémoire sans problème, mais quand le ntheme est > 26, problème. il prend tout son temps pour charger et m'envoie l'erreur (Cible introuvable : Cible="0" Base="_level0") et a la fin d'afficher lecontenu du bloc "case" concerné, il affiche "undefined".
C'est comme ci le temps imparti pour lire des lignes de code ne le suffit pas pour aller jusqu'au bout.
Je rappelle que je travaille sur une machine de 80Go de disque, MC : 1Go etc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fguitton Messages postés 396 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 novembre 2009 1
6 août 2008 à 19:45
Bonjour,

Alors pour l'erreur que tu obtiens, il s'agit souvent d'un retour provoqué par l'utilisation de la fonction tellTarget( Qui n'est plus adapté depuis la version 5 de Flash ).
Quand par exemple tu écris :

frame = int(loadedbytes/(totalbytes/100));
tellTarget (_root.loader) {
     gotoAndStop(_root.frame);
}

Quand il faudrait plutôt écrire :

frame = int(loadedbytes/(totalbytes/100));
loader.gotoAndStop(_root.frame);

En revanche je ne vois pas pourquoi il exécute très bien les actions de 0 à 25 et qu'ensuite il bloque.
As-tu définis un paramètre default dans ton switch ?
Tu dis que tu a vérifier le code, mais l'as tu exclusivement vérifié à la machine grâce au bouton "Vérifier la syntaxe" ou bien l'as tu vérifié également par toi même de ton propre chef ?( Car selon les versions de Flash, certaines erreurs passent à la trape dans certaines circonstances ).

Maintenant j'ai bien peur de ne pas voir d'où pourrai provenir le problème sans consulter le fichier.
Je vais réflechir au problème tout de même, peut-être que j'aurais un éclair.

@+
Bon Code
Florian
0
cs_Limack Messages postés 89 Date d'inscription jeudi 8 décembre 2005 Statut Membre Dernière intervention 23 décembre 2011
6 août 2008 à 20:24
Oui je l'ai vérifié avec le bouton de flash "Vérifier la syntaxe".

Ce que j'ai fini pas comprendre, c'est qu'il n'arrive pas à lire tout le contenu du bloc "case" avant de passer. j'ai du couper mon switch en 2 donc la première se fait sur le calque1 (de 1 à 37) et la seconde sur le calque2 (de 38 à 75). Comme ça marche pour le moment en attendant de trouver une solution definitive.
0
Rejoignez-nous