Remplacer un movie clip (child) par un autre en as3

cs_mariemachin Messages postés 5 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 28 janvier 2010 - 15 sept. 2009 à 11:55
cs_mariemachin Messages postés 5 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 28 janvier 2010 - 16 sept. 2009 à 15:33
Salut la compagnie,
Je suis novice en action script 3
Je souhaiterais faire un truc à priori tout simple, à savoir remplacer un movie clip (movieclip1) par un autre (movieclip2) et par cette action décharger le premier movie clip (movieclip1).
Voila le code que j'ai mis sur la derniere image de mon movieclip1 :

import flash.display.MovieClip;

var chargeClip2:MovieClip = new movieclip2();
addChild(chargeClip2);

Pas de souci pour visualiser le movieclip2 sauf que le movieclip1 est toujours visible et donc chargé, (normal puisqu'on est dedans).

Je pense qu'il faut que j'appelle le movieclip1 en code depuis la sequence 1 (car la du coup movieclip2 est un enfant de movieclip1, n'est-ce pas?) et que par la même occasion je lui dise qu'une fois que movieclip1 a joué il lance movieclip2 et le décharge, mais c'est ce code la que je ne connais pas... Soyez sympa les copains, ce n'est pas une colle que je vous pose mais le béaba de l'as3, j'attends avec impatience votre petit coup de pouce. Si je peux vous aider sur d'autres trucs, ce sera avec plaisir évidemment.

Merci d'avance.


À force de transformer des bidules en trucs, j'obtiens des machins...

5 réponses

dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
16 sept. 2009 à 10:18
Hello

La principe pour remplacer facilement un objet graphique est le suivant :

conteneur.addChildAt( mc, index);

Tout simplement.. Le fait de spécifier un index est ce qui fait tout. Comme il doit afficher le movieclip à la même profondeur, il va remplacer l'ancien.
Ça implique bien sûr que mc1 a été affiché à cette même profondeur, et depuis le même conteneur.

Ah oui, tu devrais extraire le code contenu dans la derniere image de ton movieclip1, pour le mettre sur le scénario, c'est + propre et moins contraignant.

En espérant t'avoir un peu dépanné.
0
dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
16 sept. 2009 à 10:23
ps: si tu demandes comment savoir que mc1 a fini d'être joué si tu ne mets plus de code à l'intérieur, et donc depuis le scénario, tu peux faire une boucle enterframe et tester si mc.currentframe == mc.lastFrame

(bon y'a mieux en dispatchant un événement depuis la dernière frame, mais c'est une solution).
0
cs_mariemachin Messages postés 5 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 28 janvier 2010
16 sept. 2009 à 11:57
Merci pour tes conseils, je vais me pencher sur cette histoire d'index et de profondeur que je ne maitrise pas encore, j'ai compris le principe mais jamais mis en application.
Petite question pour être sûre,
Avec la méthode que tu m'as indiqué mon mc sera remplacé mais est-ce que le précédent sera toujours chargé en mémoire??? Mon souci est surtout là, faut que j'optimise à bloc tout mon mon projet car j'ai beaucoup d'élèment à intégrer.
Encore merci.


À force de transformer des bidules en trucs, j'obtiens des machins...
0
dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
16 sept. 2009 à 14:24
Bon alors en fait j'ai dis une bétise! Le clip ne sera pas remplacé sur sa profondeur mais seulement décalé! En fait il faut effacer l'ancien mc pour ajouter le nouveau à sa place. Mais le principe des profondeurs est toujours valable.

Si tu veux voir un peu la théorie dessus, qui est très importante si tu veux bien gérer ton appli, c'est "la gestion de la display list", autrement dit de la liste d'affichage (comment flash player gère tous les objets graphiques à l'écran en gros).
Y'a le tuto de Thibault Imbert qui est très bien pour ça :
http://www.flashxpress.net/wp-content/livreThibault/Chapitres/Ch04%20-%20Liste%20d%27affichage.pdf (page 8 pour ton cas)

Par contre, lorsque tu utilises removeChild(mc) pour le virer de l'écran , l'objet subsiste toujours en mémoire. Il faut l'attribuer à null pour libérer les ressources (mc = null;) (et aussi penser à virer les écouteurs si tu as ajouté).
0

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

Posez votre question
cs_mariemachin Messages postés 5 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 28 janvier 2010
16 sept. 2009 à 15:33
OK je te remercie de la précision.
Je connais cet ouvrage, c'est une vraie bible (bien que pas toujours évident à déchiffrer pour un novice) mais quand j'ai en plus des explications plus concrètes comme tu m'as donné ça devient tout de suite plus accessible.


À force de transformer des bidules en trucs, j'obtiens des machins...
0
Rejoignez-nous