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 :
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 ?
<?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.
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 ?
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
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
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 ?
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");
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 :) )
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.
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...
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...
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...
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 ?
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)