Problème de loader / unload

Résolu
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009 - 27 avril 2009 à 16:56
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009 - 1 mai 2009 à 09:25
Salut tout le monde je vous expose mon souci :

Réalisant mon portfolio en flash, j'ai créé un swf principal avec des boutons qui lorsque l'on clique sur eux appellent des swf externes. Tout marche formidablement bien hormis une chose: le unload tant et si bien qu'au bout d'un moment l'anim rame complètement puisque les swf se superposent. J'ai retourné le problème dans tous les sens et pourtant bien cherché mais rien à faire je n'arrive pas à régler mon prob.

Ci joint le code de mon swf d'accueil:

var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("the wall reverse.swf");
var adresse2:URLRequest = new URLRequest("the wall reverse 2.swf");
var adresse3:URLRequest = new URLRequest("the wall reverse 3.swf");
addChild(chargeur);



function fct1(pEvt:MouseEvent):void {

chargeur.load(adresse);
}

function fct2(pEvt:MouseEvent):void {

chargeur.load(adresse2);
}

function fct3(pEvt:MouseEvent):void {

chargeur.load(adresse3);
}

bouton1.addEventListener(MouseEvent.CLICK,fct1);
bouton2.addEventListener(MouseEvent.CLICK,fct2);
bouton3.addEventListener(MouseEvent.CLICK,fct3);



J'ai essayé de mettre des "chargeur.unload();" avant les "load", mes "trace" passent bien et pourtant rien de se décharge"...

Une idée?

43 réponses

on_drag_on Messages postés 1236 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 6 octobre 2010
28 avril 2009 à 13:31
Et une petite boucle for pour optimiser tout ça ne ferait pas de mal ...

@+.
telov.ch
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 13:33
Salut,
je crois que l'on peut resoudre le pb simplement en empechant de loader et d'unloader en même temps, ce qui semble être ton cas. Tu peux essayer un truc du style :

var req:URLRequest = new URLRequest( "mon.swf" );
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
loader.load(req);
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 13:34
Peser lourd ???

je parie que tes swf secondaires une fois compiler ne font pas plus de quelques ko, ce n'est que du code... et quelques boutons (tout dépends evidemment de comment tu fais tes boutons...)

Dans ton cas j'irais faire une petite recherche dans flashkod sur concernant des sources sur des galeries d'images (eventuellement piloté par xml)

@+
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 13:38
@Gremlins7 pas dans son cas, regarde la structure qu'il développe... les Loader s'imbriquent les un dans les autres à chaque click (ou presque).

Loader principale charge un swf secondaire, qui charge a un moment le menu... qui charge un des swf secondaire, etc...

@+
0

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

Posez votre question
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 13:41
Bon bah la ça y est je suis dans le mur lol...........

Ma construction marche bien le prob est uniquement le unload de mes swf ... tout est lu parfaitement jusqu'à ce que ça rame... De ce que je lis je ne suis pas le seul à utiliser cette classe ni a avoir des problèmes avec...
je me vois mal reconstruire tout l'anim autrement... J'opte pour la solution des load et unload pour un gain de poids et de vitesse de développement.

Je suis un peu paumé là... d'autant qu'en as2 avec des loadmovies il n y a pas de probleme d'unload puisque le load supprime les antérieurs....
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 13:46
Ben, justement sa structure ressemble à une "fonction recursive" qui aurait une mauvaise condition de sortie.
Mais je rejoint ton avis, je pense que c'est trop morcelé et que une petite réorganisation (si c'est possible) s'impose.
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 13:48
En réponse à girou : si si les swf pèsent le princpe de l'anim est le suivant :

En alpha un mur apparait puis en utilisant l'interpolation 3d le mur prend de la persective, mon logo apparait en fondu puis une illustration arrive sur le coté avec un effet d'accélération (aller-retour) et des stores arrivent sur le coté (accélération aussi) se baissent et font apparaitre sous la forme de grandes images les boutons pour aller aux autres swf qui (et c'est pour ça que tout n'est pas simple lol) une fois lancé,reprennent la dernière image de l'anim principale, puis logo et mascotte disparaissent, les panneaux se retirent, et le mur reprend sa config d'origine et la apparraissent les boutons appelant les images de mon portfolio.... c'est du torturé de chez torturé mais l'effet est terrible... c'est pour cela que j'aimerai bien vous les montrer....
 qui descendent et font apparaitre
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 13:48
Et oui... avec l'AS2 ça marchait... mais plus avec l'AS3

Tu devrais avoir ton menu dans l'animation principale et ne lancer dans ton Loader (aussi présent dans l'animaion principale)  que les animations secondaires et ne pas recharger le menu dans ces animations secondaires

@+
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 13:50
Tout a fait d'accord avec ça : "Tu devrais avoir ton menu dans l'animation principale"
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 13:54
SUITE DU MESSAGE

histoire que tout le monde comprenne la construction.... si je voulais faire du basique j'aurai fait une seul anim flash et du xml sur cette anim et je m'emm....pas  la vie depuis deux jours lol.
J'utilise vraiment flash comme j'utilise photoshop ou illustrator je suis graphiste du coup je m'en sors très bien en créa et en construction le résultat est fidèle à ce que j'avais en tete mais la barrière c'est cet unload et je suis obligé d'utiliser ces fonctions pour arriver à mes fins ...
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 13:58
Là ce que je vois de plus simple c'est lors de l'intégration, dire à mon bouton "retour" de rafraichir la page et de revenir à l'accueil.... comme ça le problème de surcharge est résolu, je vire tout les load (anim principale); de mes swf externes et je suis tranquille... mais mes compétences en as3 n'en resortent pas meilleures....
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 14:01
Oui, mais je crois que, bien que tu soit un créa, tu ne dois pas non plus negliger l'aspect d'automatisation (de programmation) de ton anim. En réalité, mais si c'est pas toujours facil, commencer par ecrire sur un papier en detaillant tout ce que l'on veut faire evite de tomber dans ce genre d'impasse. Car ça oblige à reflechir à la structure dès le depart.
En pratique, il y a plein de solutions pour ce pb, mais au vue de ce que tu as deja fait, ca t'obligerai a recommencer, et c'est ce que t'as conseillé Girou : tu dois réorganiser.
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 14:09
ok mais dans tous les cas je suis obligé, vu ce que je souhaite faire, d'utiliser load et unload.... c'est les fondations de ce site.... Je m'acharne mais je suis sûr qu'il y a une solution ...
Pour le reste je suis d'accord avec toi, une structure de programmation me manque et j'aurai pas due faire l'impasse dessus.... disons que je suis un noob en as3 "poussé" et que je suis partisan du "on va bien voir"...au moins ç'est formateur, j'ai appris plus de choses en une semaine qu'en 3 mois de tutos. Donc pour les unload, tout le monde sèche ?
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 14:18
Non, je ne crois pas que tout le monde seche...
Regarde ce que j'ai posté precedement, les premices de la solution y est...
là j'ai pas trop le temps, mais je repasserai plus tard voir ou tu en es.
bon courage.
0
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
28 avril 2009 à 14:23
Fiuu a peine partie que je suis spammé de mail...
Que de réponse !

Alors pour les évènements.

L'idée c'est de déclencher manuellement un évènement depuis tes swf afin de demander à ton swf principal de charger les éléments que l'on souhaite.

Exemple pour le swf à chargé n°1 lorsque tu veux charger le swf n°2

dispatchEvent(new Event("loadSwf2"));

Du coté du swf principal il suffit alors d'écouter cet évènement et lorsqu'il survient de charger le bon swf.

myLoader.addEventListener("loadSwf2", chargementSwf2);
//chargementSwf2 correspond à ta fonction qui lance le chargement du 2e swf.

Attention par contre, je ne suis pas sur que l'évènement soit délenché sur le loader directement mais plutôt sur le contenu du loader (puisqu'il correspond à un swf).
Essai donc avec "myLoader.content.addEventLi...."

Par contre, dans ton cas, tu souhaites charger plusieurs swf. Ce n'est peut être pas la meilleure solution d'écouter un évènement par chargement.
Le problème étant que pour ajouter un swf à charger il faudra modifier le swf principal pour ajouter la prise en compte de l'évènement.

Tu peux donc créer un évènement qui te sera propre ;)
Pour cela, il te suffit de créer une classe qui hérite de la classe Event (sans oublié de surcharger les méthodes à surcharger) et d'ajouter un paramètre que tu voudrais.

Par exemple tu pourrai ajouter le paramètre "src" qui serait la source du swf à charger.
Du coup coté swf principale, le code ressemblerait à ceci :

myLoader.addEventListener(SwfLoadEvent.LOAD, chargement);
function chargement(evt:SwfLoadEvent):void {
myLoader.unload();
myLoader.load(new URLRequest(evt.src));
}

SwfLoadEvent.LOAD correspond à un attribut static de type String, histoire de bien faire qui aurait par exemple la valeur "loadSwf".
Ensuite, l'attribut "src" lui contiendrait l'url du swf à charger.

Du coté de chacun de tes swf tu n'aurait plus qu'a choisir le swf à charger.

myBtn.addEventListener(MouseEvent.CLICK, loadSwf2);
function loadSwf2(evt:MouseEvent):void {
dispatchEvent(new SwfLoadEvent(SwfLoadEvent.LOAD, false, false, "monswf-2.swf"));
}

Le code est généré de tête, il y a peut-être des erreurs.

Attention pour adopter cette méthode, il te faut bien comprendre le principe des évènements en ActionScript.
De même, avoir déjà manipuler un peu les classes :)

L'avantage de cette méthode : Plus besoin de toucher à ton swf principal ;) Le swf à charger sera indiquer directement depuis le swf qui demande le chargement.

Blacknight
www.osteres.com
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 14:24
Je viens d'essayer un nouveau truc :

Je crée un new MovieClip en plus d'un Loader et je mets le clip en addChild(mc_clip);

Et dans chaque fonction de mes boutons, je lui dis de removeChild(mc_clip);
puis d'exécuter le Loader et enfin addChild(mc_clip);

Le résultat c'est que j'entends (il y a du son sur mes swf) mon swf se charger autant de fois que je clique sur le bouton et ce sans ralentissement ou ramage mais il n'apparait pas , c'est le swf principal qui le cache.

Qu'en pensez vous?

var mclip:MovieClip = new MovieClip;
var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("thewallreverse.swf");
var adresse2:URLRequest = new URLRequest("thewallreverse2.swf");
var adresse3:URLRequest = new URLRequest("thewallreverse3.swf");
addChild(mclip);

function fct1(pEvt:MouseEvent):void {

    chargeur.load(adresse);
    chargeur.unload();
    removeChild(mclip);
    addChild(mclip);
}
0
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
28 avril 2009 à 14:35
D'après le code que tu as écrit je ne comprend pas l'intérêt d'une telle modification !

Tu crée juste un clip que tu retire puis ajoute sur la scène.

Attention : Si tu es déjà passé par ActionScript 2, tu auras sans doute le réflexe d'utiliser des MovieClip à tout va, hors dans ... disons 90 % des cas, le MovieClip n'est pas le meilleur objet à utiliser.
En effet dans 90% des cas la timeline n'est pas nécéssaire, il est donc plus judicieux (et performant) d'utiliser la classe Sprite (classe mère de la classe MovieClip).
La différence ? Le Sprite ne possède pas de timeline. Il est donc moins lourd à gérer.

J'ai l'impression que c'est une solution "à l'arrache" que tu as fait la...
0
cs_olliesound Messages postés 41 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 16 décembre 2009
28 avril 2009 à 14:40
Disons que je teste et je regroupe les avis de tous ceux qui ont rencontrés des prob avec ces fameux unload et load... Dans tout les cas, le swf externe ne s'affiche pas (c'est le principal qui reste visible) mais il est lu puisque j'entends les phases sonores et il ne rame pas meme au bout de 15 clics. C'est donc une fausse piste?
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 14:41
sans addchild(chargeur) logique que tu ne vois rien

@Blacknight -> la solution semble intéressante. Je savais pas qu'un swf externe pouvait faire 'remonter' des Events vers son conteneur. Mais cela semble logique au vu de la structure de l'AS3... J'ai encore du boulot pour rattraper mon retard ;o)

@+
0
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
28 avril 2009 à 15:03
Pas le peine d'aller jusqu'a surcharger la classe Event !!! C'est un peu tarabiscoté tout ça !!!
Remonter des events pour une fonction ou un objet qui remonte des events, pour un objet qui remonte des events ...etc... ça me rappelle vaguement la recursivité pas vous ?.
0
Rejoignez-nous