IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Soucis d'objet null


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut Soucis d'objet null
    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.

  2. #2
    Nouveau candidat au Club
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut
    Je vous met aussi les deux fonctions appelées par le if else. C'est un petit peu de la bidouille vue que les deux fonctions sont identiques, la seul différence c'est le evt:Event pour celle qui est appelée au onComplete ...

    J'avoue je ne sais absolument pas comment faire autrement.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
        private function _debutOuvertureContactA():void {
     
                trace("ok pour le début ouverture contact");
                // on supprime l'ancien container avec son contenu (ailes, sceptre ou vision)
                removeChild(container);
                container == null;
                // pour en recréer un vide et y ajouter contact
                container=new Sprite  ;
                addChild(container);
     
                contact=new Contact  ;
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
     
        }
     
        private function  _debutOuvertureContactB(evt:Event):
        void {
     
                trace("ok pour le début ouverture contact");
                // on supprime menuPrincipal
                removeChild(menuPrincipal);
                // on ajoute un container pour placer contact
                container=new Sprite  ;
                addChild(container);
     
                contact=new Contact  ;
                contact.name="contact";
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
     
        }

  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 612
    Par défaut
    Citation Envoyé par Kultansa Voir le message
    Je vous met aussi les deux fonctions appelées par le if else. C'est un petit peu de la bidouille vue que les deux fonctions sont identiques, la seul différence c'est le evt:Event pour celle qui est appelée au onComplete ...

    J'avoue je ne sais absolument pas comment faire autrement.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
        private function _debutOuvertureContactA():void {
     
                trace("ok pour le début ouverture contact");
                // on supprime l'ancien container avec son contenu (ailes, sceptre ou vision)
                removeChild(container);
                container == null;
                // pour en recréer un vide et y ajouter contact
                container=new Sprite  ;
                addChild(container);
     
                contact=new Contact  ;
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
     
        }
     
        private function  _debutOuvertureContactB(evt:Event):
        void {
     
                trace("ok pour le début ouverture contact");
                // on supprime menuPrincipal
                removeChild(menuPrincipal);
                // on ajoute un container pour placer contact
                container=new Sprite  ;
                addChild(container);
     
                contact=new Contact  ;
                contact.name="contact";
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
     
        }
    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
    
    
    private function _debutOuvertureContactA():void {
                
                trace("ok pour le début ouverture contact");
                // on supprime l'ancien container avec son contenu (ailes, sceptre ou vision)
    if(container!=null){
    //penser a supprimer les events qui lui sont rattachés a ce moment
                removeChild(container);
    }
                container == null;
                // pour en recréer un vide et y ajouter contact
                container=new Sprite  ;
                addChild(container);
                
                contact=new Contact  ;
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
                
        }

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 612
    Par défaut
    Citation Envoyé par ferber Voir le message
    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
    
    
    private function _debutOuvertureContactA():void {
                
                trace("ok pour le début ouverture contact");
                // on supprime l'ancien container avec son contenu (ailes, sceptre ou vision)
    if(container!=null){
    //penser a supprimer les events qui lui sont rattachés a ce moment
                removeChild(container);
    }
               // container == null; 
     container = null;//attention == et = sont diférent
    
                // pour en recréer un vide et y ajouter contact
                container=new Sprite  () ;
                addChild(container);
                
                contact=new Contact  ();
                contact.x=63;
                contact.y=57;
                container.addChild(contact);
                contact.playIn();
                
        }

Discussions similaires

  1. objet null en ncomparaison
    Par root76 dans le forum Langage
    Réponses: 5
    Dernier message: 19/04/2007, 15h03
  2. [jsp] usebean d'un objet null
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/07/2006, 18h12
  3. Réponses: 4
    Dernier message: 18/02/2006, 16h48
  4. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06
  5. Formulaire - lien JS - objet Null ou pas objet...
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/10/2004, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo