Pb de unloadmovie...

Résolu
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008
- 9 janv. 2007 à 11:46
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008
- 9 janv. 2007 à 16:59
Bonjour,


J'ai un pb avec un unloadmovie, prmis j'ai cherché mais je trouve pas du tout.


J'ai une frame sur ma scene avec énormément de menus, chacun renvoie à un autre frame de la meme scene, par exemple bouton1 renvoie à la frame 2.
Sur cette frame2, j'ai un clip avec dedans des images et l'action suivante :

mclip = _root.createEmptyMovieClip("monclip",0);
 _root["monclip"]._x = 339;
 _root["monclip"]._y = 167;
 mclip.loadMovie("monclip.swf",0);

Sur ma scène principale, je voudrais un bouton qui fasse revenir à la frame1 (celle où il y a mes menus) et en meme temps qui décharge le swf, dc j'avais fait :

on (release) {
 gotoAndStop(1);
 unloadMovieNum(1);
}

Mais ça ne marche pas, le clip est toujours là, quand j'arrive sur la frame 1...
Comment faire ?

Merci beaucoup de m'aider

a2line

13 réponses

cs_Girou
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
9 janv. 2007 à 16:36
Bon, faisons un peu de théorie….




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 






Tu as deux façons de programmer un site en flash :




 






1° ‘A l’ancienne’ (flash 4 – 5 voir 6) avec du code partout, des clips partout sur un tas de frames et de calques différent.



C’est manifestement la méthode que tu utilises…



Ce n’est pas que cette méthode soit mauvaise, mais elle est très difficile a modifier ou a reprendre après quelques mois de repos




 






2° Une méthode plus ‘Architecturée’ (mx, flash 7, 8)



Utiliser des fonctions qui s’occupent du travail récurent (charger du contenu dans un clip conteneur par exemple).



Mettre tous les scripts (ou du moins un maximum) dans une image clé



Cela revient au même résultat mais tu obtiens un code centralisé et nettement plus clair




 






Par exemple, plutôt que de mettre sur chaque bouton un script



On (release) {



// fait quelque chose



}



Tu donnes des noms d’occurrences à tes boutons et tu mets en frame 1



monBouton1.onRelease = function() {



// fait quelque chose



}




 






Prenons ton cas, comment je structurerais le site



Si j’ai bien compris, tu as divers ‘fonds’ images ou animations et par dessus tu ajoutes selon le click sur des boutons, des images et des animation ou des vidéos.




 






1° créer un clip menu contenant les boutons.



Mettre cela dans un clip permet de désactiver ou de faire disparaître (_alpha) tous le menu d’un coup




 






2° créer des clips dans la bibliothèque contenant les différents fond possible.



Créer un clip vide (createEmptyMovieclip) fond ou tu appelleras le fond que tu veux via attachMovie




 






3° créer un ou plusieurs conteneurs pour les contenus externes variables à charger




    




4° Créer quelques fonction qui vont s’occuper de piloter l’ensemble




-        


charger du contenu





-        


changer le fond





-        


afficher / masquer le menu





-        








 






Plus besoin de tas de frames et de calques, tout est dans la bibliothèque prêt à servir



Juste du script pour afficher et piloter le tout



Hautement paramétrable et facile à mettre à jour. Plus besoin de modifier des animations complexes, tout est séparé en petites unités indépendantes mises ensemble grâce au script




 






Dans ton cas précis, tu n’as plus un tas de frames et d’images clés, une ou deux frames suffisent pour l’ensemble du site.




 






J’admets que c’est une toute autre manière de faire et sans doute pas applicable a ton site sans devoir tout recommencer, mais une prochaine fois, pense-y !!!



Pour ton cas actuel, c'est pas évident de te répondre de façon précise, je ne comprend pas exactement ce que tu veux vu que je n'ai pas l'exemple devant les yeux.

@+
3
cs_Burnside
Messages postés
1132
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
6 mars 2020
1
9 janv. 2007 à 11:56
Slt,


Si je dis pas de connerie, car je n'ai pas flash sous la main pour vérifier.

on (release) {
 gotoAndStop(1);
 unloadMovieNum(mclip);
}
ou
on (release) {
 gotoAndStop(1);
 unloadMovieNum("mclip");
}

Car à chaque clic tu recrées le clip donc pas de problème et pourquoi ne pas charger des fichiers externes dans un movieclip centrale vide?

Bàt,
Burnside.
 

 

..:: Enjoy living in hell ::..
http://www.art-line.be
0
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 12:06
Euh, ni l'un ni l'autre ne marche, en plus ça fait un truc bizarre, ma fenetre macromedia passe derriere mes fenetres explorateur quand je clique sur le bouton en question.

En fait je veux que lorsque l'on clik sur un bouton du menu, l'affichage au moins des images de fond (sans le swf externe) apparaissent sans aucun délai, c'est pour ca que j'avais fait des clips avec mes images de fond dedans, et qu'a partir de là mon swf externe se charge. (suis pas tres claire hein ?)

Donc que faire ? Ya peut-etre une autre solution ?

a2line
0
cs_Girou
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
9 janv. 2007 à 12:27
Bonjour,

petite erreur dans ton script :
 mclip.loadMovie("monclip.swf",0); le 0 n'a pas de sens. le second parametre (facultatif) de loadMovie spécifie une méthode HTTP d’envoi ou de chargement des variables. pas d'application dans ton cas et de toute façon 0 est incorrect.

Deuxiemement, pour décharger le contenu d'un clip, ru dois utiliser unloadMovie et non unloadMovieNum.
unloadMovieNum décharge un clip chargé dans un level et non dans un clip.
Tu mixes les deux concept en fait

ton bouton devrait contenir le code :

on (release) {
  mclip.unloadMovie(); // si le script est au même niveau que mclip = _root.createEmptyMovieClip("monclip",0);
// ou alors en ciblage complet
// _root.monclip.unloadMovie()
   gotoAndStop(1);
}

lors de la création de mclip, utilise un autre niveau que le 0 pour placer ton clip
mclip = _root.createEmptyMovieClip("monclip",0);

P.S. sans garantie comme Burnside, pas de flash sous la main en se moment
P.S. 2 : Pour Burnside, je vois que le pays de la frite est plutôt actif sur flashkod

@+
0

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

Posez votre question
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 12:55
Merci beaucoup de vos réponses !
Alors effectivement, je m'étais un peu mélanger les pinceaux, j'ai donc maintenant dans mon clip :

mclip = _root.createEmptyMovieClip("monclip",1);
            _root["monclip"]._x = 339;
            _root["monclip"]._y = 167;
mclip.loadMovie("monclip.swf");

et sur mon bouton :

on (release) {
   _root.monclip.unloadMovie()
   gotoAndStop(1);
}

Ca marche impec' sauf que :
j'avais exprès mis ce bouton hors des clips, sur la scène, pour que son code corresponde à n'importe quel swf externe, or là, je suis obligé de mettre le nom du clip à chaque fois (monclip).

N'y a-t-il pas un terme genre "currentswfexterne", à la facon de currentClip qui fermerait les swf externes peu importe leur nom ?

Merci d'avance

a2line
0
cs_Girou
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
9 janv. 2007 à 13:15
Hello,

c'est la cas avec cette fonction.
dans _root.monclip tu charge nimporte quel clip (swf ou image) externe.
En faisant unloadMovie, tu vide ce clip et tu peux y remettre un autre swf

donc lorsque tu clique sur un bouton de ton menu (par exemple)
mclip.loadMovie("monclip.swf");

lorsque tu reviens a la frame 1 et que tu cliques sur un autre bouton de ton menu tu fais
mclip.loadMovie("monclip-2.swf");

Pour que ce soit plus parametrable, utilise une fonction
function chargerClip(cible){
   mclip.loadMovie(cible);
}
et appelle la fonction lorsque tu dois charger un nouveau contenu
chargerClip("monfichier.swf");

Autre chose,
mclip = _root.createEmptyMovieClip("monclip",1);
_root["monclip"]._x = 339;
_root["monclip"]._y = 167;
mclip.loadMovie("monclip.swf");

Autre chose, réutilise ta variable mclip, c'est plus logique et plus propre avec ton code !

mclip = _root.createEmptyMovieClip("monclip",1);
mclip._x = 339;
mclip._y = 167;
mclip.loadMovie("monclip.swf");

@+
0
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 13:29
ok pour ce que je dois mettre dans mon clip, mais pour le bouton ? je comprends pas trop...
Ce ne sont pas les boutons de mon menus qui appellent les swf, ils renvoient juste à une image clé sur laquelle il y a  un clip, dans lequel, il ya le code, en plus d'autres images.

Donc je ne mets pas de code sur le bouton à part le gotoandstop.
Ce qui fait que c'est sur le fameux bouton "fermer" qui est prolongé sur ttes les frames, que je voudrais un code général qui ferme n'importe quel swf.

Je voudrais donc trouver quelque chose du style :

on (release) {
   unloadMovie(all)
   gotoAndStop(1);
}

en clair qui vire le swf en cours, sans que je doive citer son nom à chaque fois (oui, parce que j'en est une centaine :) )

a2line
0
cs_Burnside
Messages postés
1132
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
6 mars 2020
1
9 janv. 2007 à 14:31
Re,


je reviens dans la discution, donc pourquoi ne pas avoir une frame avec une zone qui contient ton menu et en dessous un clip vide qui charge le swf externe que tu désires, bcp plus facile à mettre ajour et bcp plus rapide.
Girou devrait confirmer mon idée...


Bon courge pour ton developpement.


Burnside.


PS: Girou : Oui la grosse frite belge est active, car calme au bureau pour le moment...et le soir pas trop le temps.


..:: Enjoy living in hell ::..
http://www.art-line.be
0
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 14:43
Bah en fait, c'est une bonne idée mais qui ne concient pas à mon site (qui lie anim et video) parce que je veux aboslument que les clips (image de fond) soient là tt de suite quand on clique meme si leur contenu (swf externe) met plus de temps à arriver. Je ne veux aucun temps de chargement avant l'image de fond, je suis chiante hein...

a2line
0
cs_Girou
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
9 janv. 2007 à 15:35
Mais non tu n'es pas chiante...

Par contre Burnside a raison !
Ton ou tes clip de fond peuvent être dans le swf principal sur des calques et sur un autre calque ton ou tes clip(s) vide(s) qui vont charger le contenu
avec seulement une image clé sur le calque contenant le clip vide, ou alors
créé a l'éxécution (ce qui est ton cas) mais une seule fois et pas a chaque fois.


Effectivement, beaucoup plus simple a maintenir et a programmer en fin de compte

Il n'exist pas de fonction unloadMovie(all), mais si tu connais tous les clips a vider, fait un fonction qui les unload tous (avec tes si il ne le sont pas déjà)... mais c'est tordu comme méthode...

@Burnside :  pareil pour moi !!!

@+
0
cs_Girou
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
9 janv. 2007 à 15:35
Mais non tu n'es pas chiante...

Par contre Burnside a raison !
Ton ou tes clip de fond peuvent être dans le swf principal sur des calques et sur un autre calque ton ou tes clip(s) vide(s) qui vont charger le contenu
avec seulement une image clé sur le calque contenant le clip vide, ou alors
créé a l'éxécution (ce qui est ton cas) mais une seule fois et pas a chaque fois.


Effectivement, beaucoup plus simple a maintenir et a programmer en fin de compte

Il n'exist pas de fonction unloadMovie(all), mais si tu connais tous les clips a vider, fait un fonction qui les unload tous (avec tes si il ne le sont pas déjà)... mais c'est tordu comme méthode...

@Burnside :  pareil pour moi !!!

@+
0
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 15:53
Je comprends pas très bien,
mon calque vide qui va charger le contenu, il sait comment le contenu qu'il doit charger ?
Ou alors, il faut mettre le code de ce qui doit se charger sur chaque frame ?
Dans ce cas c'est pareil nan ?
Puisque mes boutons n'appellent pas les clips...


Ca voudrait dire que je sors le code de chaque clip et le mets sur une frame vide au dessus de chaque clip ?
Genre : frame2, un calque avec le clip et un calque avec le code ?


Si c'est bien ça, qu'est-ce que ça change ?


A moins que du coup, grâce à cette méthode, je puisse mettre sur mon bouton "fermer" (celui qui revient à la frame 1) :



on (release) {
  mclip.unloadMovie();
   gotoAndStop(1);
}


Ce qui fait que du coup tous les swf externe virent ?
Vu d'ici ca me parrait presque logique... je me trompe ?

a2line
0
A2linegarnoule
Messages postés
45
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
2 avril 2008

9 janv. 2007 à 16:59
Tout d'abord, merci beaucoup de ta patience !!!
Meme si je suis un peu lente, ça m'aide quand meme beaucoup (pour la prochaine fois ;) )
J'ai appris flash toute seule, alors, au fil de mon érrance sur les forums je mélange un peu le vieux et le new code, mais je vais y arriver hein !

J'ai bien compris ce que tu voulais dire dans le dernier post, et commence à bosser un peu plus comm ça, mais ne connaissant pas grand chose à l'action script, c'est parfois plus facile avec des interpolations (pour donner un exemple à la con)

Alors, encore merci, c'est plus clair now !!!

a2line
0