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

Flash Discussion :

Incomprehension de l'affichage


Sujet :

Flash

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 98
    Points : 35
    Points
    35
    Par défaut Incomprehension de l'affichage
    Bonjour,

    Je rencontre un probleme de total incomprehension.
    Je tente de faire une classe qui affiche un clip sur la scene.
    Truc de base me dirais vous.

    Cependant je tombe sur l'erreur suivante:

    1061: Appel à la méthode addChild peut-être non définie, via la référence de type static flash.displayisplayObject.
    Voici mon code:
    Image 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import Agent.Agent;
     
    var agent:Agent = new Agent();
    addChild(agent);
    Code de ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package Agent{
     
    	import flash.display.MovieClip;
    	import agent_mc;
     
    	public class Agent extends MovieClip {
    		function Agent() {
    			var clip:agent_mc = new agent_mc();
    			this.root.addChild(clip);
    		}
    	}
    }
    Bon, j'etend la classe Sprite pour cchoper les fonction de DisplayObjectContainer...
    agent_mc est un MovieClip de ma bibliotheque bien lié a actionscript.
    this.root.addChild() as ete recuperé sur la doc officielle.
    du coup je comprend pas du tout l'erreur...

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Salut.

    Un truc me perturbe : si je comprends bien là tu ajoutes 2 fois ton objet : une fois d
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Salut.

    Un truc me perturbe : si je comprends bien là tu ajoutes 2 fois ton objet : une fois dans le code de la scène et 1 fois dans le constructeur de l'objet. Déjà ça me paraît bizarre (mais je peux me tromper). Ensuite dans le constructeur de l'objet tu appelles this.root.AddChild mais si je ne dis pas de bêtise, tu n'as pas encore de root pour l'objet Agent puisque tu ne l'ajouteras qu'après son instanciation. Que se passe-t-il si tu enlèves cette ligne ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 98
    Points : 35
    Points
    35
    Par défaut
    Si je retire la ligne this.root etc, l'erreur disparait mais mon movie clip ne s'affiche pas plus...

    classe Agent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Agent extends MovieClip {
    		var clip:agent_mc = new agent_mc();
     
    		function Agent() {
    			clip.x = 150;
    			clip.y = 150;
    			clip.visible = true;
    			this.addChild(clip);
    		}
     
    	}
    Premiere image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var agent:Agent = new Agent();
    addChild(agent);
    Avec ce code, j'affiche bien mon clip sur la scene.

    Mais pour ce que je veux faire il faudrait que je puisse afficher mon clip sur la scene mais a partir de la classe, a la creation de celle ci...

    Et ca je ne vois pas comment le faire.

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Points : 234
    Points
    234
    Par défaut
    Salut,

    Il y a une solution qui consiste à créer une classe, la classe du document, que ton FLA va chercher en premier.

    Dedans tu peux avoir cela :

    Main.as
    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
    package {
        
        import flash.display.MovieClip;
        import flash.display.Stage;
        import flash.events.Event;
        
        public class Main extends MovieClip {
            
            public static var GLOBAL_STAGE:Stage;
            
            public function Main () {
                addEventListener(Event.ADDED_TO_STAGE, activation);
            }
            
            public function activation (evt:Event):void
            {
                Main.GLOBAL_STAGE = stage;
                
                var agent:Agent = new Agent();
            }
            
        }
    }
    Dès que ta classe est appelée un événement ADDED_TO_STAGE est diffusé, on stock ainsi une référence à l'objet stage permettant l'affichage d'objet graphique.

    Classe Agent.as

    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
    package {
        import flash.display.MovieClip;
        
    public class Agent extends MovieClip {
            var clip:agent_mc = new agent_mc();
    
            public function Agent() {
                clip.x = 150;
                clip.y = 150;
                clip.visible = true;
                Main.GLOBAL_STAGE.addChild(clip);
            }
            
        }
    }
    Chaque fois que tu voudras afficher quelque chose, où faire référence à la scène, tu utilises la variable statique GLOBAL_STAGE. Tu peux aussi créer une classe appelée par exemple Base.as, qui hérites de movieclip, et lorsque tu écriras une nouvelle classe, tu lui fais hériter de la classe Base, comme ça tu auras ta variable statique sans perdre de temps !

    Tu as suivis ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 98
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, ca me parait tres clair...

    J'essaye ca de ce pas !!

  7. #7
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Je sais pas trop comment fonctionne flash pour la POO mais ça me perturbe que ce soit à l'objet de s'ajouter sur la scène... surtout dans son constructeur. Dans un langage objet classique ce genre d'opération se ferait en dehors de la class.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Discussions similaires

  1. Probleme d'affichage incomprehensible
    Par Xav NS dans le forum C
    Réponses: 5
    Dernier message: 10/12/2009, 14h08
  2. incomprehension total de l'affichage
    Par skerdreux dans le forum GLUT
    Réponses: 9
    Dernier message: 28/04/2008, 13h33
  3. Affichage en double incompréhensible
    Par divad dans le forum Langage
    Réponses: 6
    Dernier message: 03/08/2007, 15h17
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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