Bonjour,

Je travaille dans Flash CS4 en AS3 et j'ai un soucis dans mon code qui me génère cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 
    ArgumentError: Error #2025: Le DisplayObject indiqué doit être un enfant de l'appelant.
    at flash.display::DisplayObjectContainer/removeChild()
    at classes::Main/_debutOuvertureContactA()
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at com.greensock.core::TweenCore/complete()
    at com.greensock::TweenMax/complete()
    at com.greensock::TweenMax/renderTime()
    at com.greensock.core::SimpleTimeline/renderTime()
    at com.greensock::TweenLite$/updateAll()


Mon site fonctionne de cette façon : un menu principal (menuPrincipal) que j'ajoute sur la scène grâce à la méthode addChild au lancement du site. Même fonctionnement pour mon menu secondaire (menuSecondaire).

Ma classe Main.as écoute trois évènements personnalisés qui seront dipatchés depuis la classe MenuPrincipal.as lorsque l’on clique sur un bouton. Lorsque Main entend un de ces évènement il crée un container (type Sprite) et y ajoute la page concernée.
Ex : Il y a un code dans ma classe MenuPrincipal.as qui dispatche un event lorsque l’on clique sur le bouton Vision pour ouvrir la page Vision (Vision.as). C’est le même principe pour toutes mes pages.

Mon problème actuel vient de mon menu secondaire qui comporte entre autre un bouton « contact » et un bouton « retour home ». Ce bouton contact est différent des autres puisqu’il est toujours apparent et peux appeler ma page contact dans deux cas de figure : soit l’utilisateur se trouve sur une des pages de contenu soit il se trouve sur la home page (celle où se trouve le menu principal).

Pour résoudre ce problème j’ai fonctionné avec un if else en testant si mon container est null ou non : s'il est null c'est qu'aucune des pages se trouve à l'intérieur et que donc nous sommes sur le menuPrincipal.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
    public function ouvrirContact(evt:Event) {
            if (container == null) {
                    trace ("!!!le container est null!!!")
                    menuPrincipal.playOut();
                    menuPrincipal.addEventListener("onOut", _debutOuvertureContactB);
 
            }
            else {
                    trace ("!!!le container n'est  pas null!!!")
                    TweenMax.to(container, 1, {y: "20", alpha: 0,ease:Strong.easeInOut, onComplete: _debutOuvertureContactA});
 
            }
 
 
    }

Ce code fonctionne quand je lance la page contact directement à l’ouverture du site depuis la home (menu principal) ou quand je suis une des pages de contenu (vision, ailes ou sceptre).

Par contre quand je visionne une page et que je reviens sur la home pour accéder à la page contact plus rien ne fonctionne et Flash m’affiche la fameuse erreur ce dessus.

Au niveau des trace il m'affiche également que mon container n'est pas null alors que dans la fonction afficherHome qui m'a permis de fermer la page en cours et de revenir sur la home je fais un removeChild(container) et un container == null.

Voilà le code que je lance au clic sur le bouton «retour home ».

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
    public function retourHome(evt:Event) {
 
            TweenMax.to(container,1,{y:"20",alpha:0,ease:Strong. easeInOut,onComplete:afficherHome})
            ;
 
    }
 
    // afficherHome supprime le container une fois sa transition achevée et ajoute le menuPrincipal
    public function afficherHome() {
 
            removeChild(container);
            container==null;
 
            menuPrincipal=new MenuPrincipal  ;
            menuPrincipal.x=150;
            menuPrincipal.y=25;
            menuPrincipal.playIn();
            addChild(menuPrincipal);
            // le menu écoute de nouveau les évènements qu'il peut déclencher pour assurer la suite de la navigation
            menuPrincipal.addEventListener("ouvrirVision",ouvrirVision);
            menuPrincipal.addEventListener("ouvrirSceptre",ouvrirSceptre);
            menuPrincipal.addEventListener("ouvrirAiles",ouvrirAiles);
 
 
 
    }

Je pense que tout ce joue entre ces deux fonctions mais je ne vois pas d’où peut venir l’erreur.

Merci d'avance pour votre aide.