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 :

[Flash CS3][AS3]Charger clip avec une classe dynamique


Sujet :

ActionScript 3

  1. #1
    Membre averti Avatar de sourivore
    Homme Profil pro
    Lead Tech Front-End
    Inscrit en
    Juin 2005
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Tech Front-End

    Informations forums :
    Inscription : Juin 2005
    Messages : 451
    Points : 334
    Points
    334
    Par défaut [Flash CS3][AS3]Charger clip avec une classe dynamique
    Bonjour, je cherche à charger un clip dynamiquement en fonction d'une variable.

    Typiquement, voici ma fonction :
    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
    function majPrinc(sens){
    	//Creation du Movieclip du haut
    	var princHaut:MovieClip = new MovieClip();
    	this.addChild(princHaut);
    	princHaut.x = 98;
    	princHaut.y = 18;
    	var princHautDsp:this["princHautAttend"+sens] = new this["princHautAttend"+sens]();
    	princHaut.addChild(princHautDsp);
    	//Creation du Movieclip du bas
    	var princBas:MovieClip = new MovieClip();
    	this.addChild(princBas);
    	princBas.x = 155;
    	princBas.y = 293;
    	var princBasDsp:this["princBasMarche"+sens] = new this["princBasMarche"+sens]();
    	princBas.addChild(princBasDsp);
    }
    et l'appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.majPrinc("Droite");
    Avec la disparition de la fonction eval je trouvais cette solution logique. Or, cela ne marche toujours pas.

    Quelle est la bonne technique?

    Merci

    PS : J'ai bien fait les linkages dans les bons symboles.

  2. #2
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    Bonjour sourivore, bonjour a tous,

    Je ne me suis pas mis a l'AS3, mais cette ligne de code me parrai suspect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var princHautDsp:this["princHautAttend"+sens] = new this["princHautAttend"+sens]();
    es tu sùr que la syntaxe est correcte ?

    majPrinc() est une methode de ta class ou une fonction édité dans l'IDE flash CS3 ?

    Pourrais tu expliquer ce que tu souhaite faire ? qu'as tu mis en place pour cela ?

    ---------------------------
    Corrige moi :
    J'ai crue comprendre que tu souhaite instancier dans ta scene un clip ( présent dans ta bibliotheque ).

  3. #3
    Membre averti Avatar de sourivore
    Homme Profil pro
    Lead Tech Front-End
    Inscrit en
    Juin 2005
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Tech Front-End

    Informations forums :
    Inscription : Juin 2005
    Messages : 451
    Points : 334
    Points
    334
    Par défaut
    Bien sûr que cette ligne ne marche pas sinon je ne poserai pas la question

    En fait typiquement ce que je veux faire est simple :

    - 2 boutons btGauche et btDroite dans mon fichier
    - 4 Clips "HautGauche", "HautDroite", "BasGauche", "BasDroite"

    Je voudrais que lorsque l'on appuie sur le bouton Gauche les clips HautGauche et BasGauche se chargent et lorsque j'appuie sur le bouton Droite ce soient les clips HautDroite et BasDroite qui remplacent respectivement les deux autres.

    Apparemment j'ai réussi à contourner mon problème mais je n'arrive pas à remplacer les instances (il m'ajoute toujours un nouveau clip)

    Voici mon code :

    Ma fonction directement dans le code AS d'une frame :
    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
    function majPrinc(sens) {
    	//Mettre à jour l'animation du personnage
    	//Creation du Movieclip du haut (ne doit le creer que s'il n'existe pas!!!)
    	var princHaut:MovieClip = new MovieClip();
    	this.addChild(princHaut);
    	princHaut.x = 98;
    	princHaut.y = 18;
    	//Attacher le bon clip du haut
    	var classHaut:Class = getDefinitionByName("princHautAttend"+sens) as Class;
    	var princHautDsp:* = new classHaut();
    	princHaut.addChildAt(princHautDsp,0);
    	//Creation du Movieclip du bas
    	var princBas:MovieClip = new MovieClip();
    	addChild(princBas);
    	princBas.x = 155;
    	princBas.y = 293;
    	//Attacher le bon clip du bas
    	var classBas:Class = getDefinitionByName("princBasMarche"+sens) as Class;
    	var princBasDsp:* = new classBas();
    	princBas.addChildAt(princBasDsp,0);
    }
    Sur un autre calque de la même frame, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //On crée les clips avec leurs instances (personnage marche à droite par défaut)
    this.majPrinc("Droite");
    //Listener sur les boutons
    btGauche.addEventListener(MouseEvent.CLICK,function(event:Event){majPrinc("Gauche")});
    btDroite.addEventListener(MouseEvent.CLICK,function(event:Event){majPrinc("Droite")});
    - Suis-je bien parti?
    - Comment faire pour éviter qu'a chaque clic un nouveau clip soit créé et ainsi avoir ce que je veux?
    - Cela m'aiderait aussi de savoir comment un utilisateur régulier d'AS3 le coderait (pour voir les bonnes pratiques d'utilisation de l'AS3)

    Merci beaucoup

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Je suis loin d'être expert en AS3, mais voilà ce que je ferais :

    Une classe qui va bien avec :
    - 4 variables d'instance pour chacun de tes clips
    - Une methode majPrinc(clipHaut, clipBas)
    - Deux méthodes majPrincHaut() et majPrincBas() qui appellent la premiere avec les bons clips

    De plus est-ce qu'il y a réellement un interet a créer les clips à l'appel de ta fonction, plutôt que de les avoir déjà crée a l'initialisation de ta classe et ensuite de simplement : soit les ajouter/supprimer avec addChild, removeChild, soit les rendre visible/invisible ?


    Mais par pitié, arrête de coder dans la timeline (surtout pour définir des fonctions )

  5. #5
    Membre averti Avatar de sourivore
    Homme Profil pro
    Lead Tech Front-End
    Inscrit en
    Juin 2005
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Tech Front-End

    Informations forums :
    Inscription : Juin 2005
    Messages : 451
    Points : 334
    Points
    334
    Par défaut
    Tout d'abord pour ma défense je tiens à souligner que je viens de l'univers AS1 et donc pour moi la POO AS3 c'est assez nouveau.

    Citation Envoyé par Taum
    Salut,

    Je suis loin d'être expert en AS3, mais voilà ce que je ferais :

    Une classe qui va bien avec :
    - 4 variables d'instance pour chacun de tes clips
    - Une methode majPrinc(clipHaut, clipBas)
    - Deux méthodes majPrincHaut() et majPrincBas() qui appellent la premiere avec les bons clips
    Je vais essayer même si ça ne me parle pas trop et que je ne vois pas l'utilisation des variables d'instance


    Citation Envoyé par Taum
    De plus est-ce qu'il y a réellement un interet a créer les clips à l'appel de ta fonction, plutôt que de les avoir déjà crée a l'initialisation de ta classe et ensuite de simplement : soit les ajouter/supprimer avec addChild, removeChild, soit les rendre visible/invisible ?
    Je veux bien mais à l'initialisation de quelle classe? Sinon on ne peut faire quelquechose du genre replaceChild?


    Citation Envoyé par Taum
    Mais par pitié, arrête de coder dans la timeline (surtout pour définir des fonctions )
    OK mais pour les fonctions générales, je ne vois pas l'intérêt de les mettre dans une classe. Par exemple la fonction majPrinc ne s'applique pas à un objet en particulier tout comme par exemple les fonctions de conversion de date.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Citation Envoyé par sourivore
    Tout d'abord pour ma défense je tiens à souligner que je viens de l'univers AS1 et donc pour moi la POO AS3 c'est assez nouveau.
    Désolé si je t'ai offensé, ce n'était pas du tout là mon intention. Je voulais juste te faire réagir sur le fait que si tu passes a AS3, je penses que tu devrais également laisser tomber certaines pratiques d'AS1/2

    Citation Envoyé par sourivore
    Sinon on ne peut faire quelquechose du genre replaceChild?
    Je ne crois pas qu'il y ait de fonction replaceChild, il faut faire addChild puis removeChild


    Citation Envoyé par sourivore
    OK mais pour les fonctions générales, je ne vois pas l'intérêt de les mettre dans une classe. Par exemple la fonction majPrinc ne s'applique pas à un objet en particulier tout comme par exemple les fonctions de conversion de date.
    C'est là que je ne suis pas d'accord avec toi : il n'y a pas de fonctions générales.
    Les fonctions de manipulations de date font partie de la classe Date. Et si tu veux en rajouter, tu peux faire une classe DateUtils par exemple. En AS3, presque toutes les fonctions sont en fait des méthodes (certaines étant des méthodes de classe (mot clé static), les autres des méthodes d'instances).
    La preuve que ta fonction n'est pas "générale" : elle fait référence a this dans this.addChild. Tu es en réalité en train de manipuler un DisplayObjectContainer.
    La scène est finalement un MovieClip comme les autres. Tu peux lui donner un nom de classe dans la case "Document Class" de la fenêtre "Properties" dans Flash CS3 et créer cette classe pour l'étendre avec tes méthodes et propriétés. Le constructeur de cette classe est appellé quand l'animation se lance

    Un (court) tuto ici : http://iteratif.developpez.com/artic...asse/document/
    Essaie de te renseigner un peu sur la nouvelle architecture d'AS3 en ce qui concerne les MovieClip (DisplayObject, DisplayObjectContainer, Sprite vs. MovieClip etc. )

Discussions similaires

  1. Pb avec une Classe d'exception EOleError
    Par raoulmania dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/05/2005, 12h39
  2. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  3. Réponses: 7
    Dernier message: 05/10/2004, 13h44
  4. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41
  5. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45

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