Forums Développement Multimédia

Aller au contenu

Retrouver un MovieClip et/ou Sprite créé par script

CODE Actionscript

8 réponses à ce sujet

#1 BriçouLeFou

    Ceinture Jaune

  • Members
  • PipPip
  • 20 messages

Posté 13 November 2012 - 22:31 PM

Bonsoir par ici :)

Je suis en train de développer un mini projet de galerie avec affichage des miniatures.
Pour cela je créé un "conteneur" :

function afficherMiniatures(e:Event):void {
    var test:Sprite = new Sprite();
    this.miniatures.addChild(test);
    test.name = "conteneur";
    chargerPhotos(e.target.tab);
}

J'ai essayé en créant un objet de type MovieClip comme de type Sprite, mon problème est le même : je ne parviens pas à récupérer mon objet "dynamiquement" plus loin dans une autre fonction. J'ai testé les codes suivants :

trace(this.miniatures.conteneur);
trace(this.miniatures["conteneur"]);

... mais rien n'y fait... :(

Ce que j'aimerai pouvoir faire (enfin comprendre comment faire), c'est donner un nom d'occurrence à cet objet que je créé pour pouvoir le retrouver plus tard (afin de lui ajouter à son tour des enfants et le supprimer notamment). Or j'ai l'impression que le code objet.name = "MonNomQueJaiDonne"; ne donne pas vraiment un nom d'occurrence...

Quelqu'un pourrait-il m'éclairer ou me dire ce qui cloche ?
Merci d'avance :)
Brice

#2 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 13 November 2012 - 23:10 PM

Coucou,

Tu peux utiliser ceci pour recuperer ton object grace a son nom

Citation

miniature.getChilByName("conteneur")

Ou encore stocker ton object dans une variable pour pouvoir y acceder plus tard :

Citation


public var monConteneur:Sprite;

function afficherMiniatures(e:Event):void {
monConteneur = new Sprite();
this.miniatures.addChild(monConteneur);
chargerPhotos(e.target.tab);
}


#3 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6955 messages

Posté 13 November 2012 - 23:12 PM

Salut,

Balance tes objets dans un tableau et tu résoudra ton problème ;-)
Aller chercher un objet via son nom est rarement une bonne idée en fait.

#4 BriçouLeFou

    Ceinture Jaune

  • Members
  • PipPip
  • 20 messages

Posté 13 November 2012 - 23:13 PM

Ah cool merci pour l'astuce de l'objet "global" :) :) :)

J'ai déjà croisé le getChildByName() précédemment dans la soirée au gré de mes recherches, le truc c'est que j'ai également vu qu'il n'étais pas conseillé (en revanche je n'ai pas saisi pourquoi).
EDIT : ah ben voilà c'est Monsieur Spi qui avait déjà dit ça... Il a encore frappé plus vite que son ombre :D

Merci beaucoup pour ta réponse draad :)

#5 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 13 November 2012 - 23:32 PM

C'est pas conseille parceque c'est lent et vraiment pas clair pour ton utilisation, puis imagine que tu ai deux objets portant le meme nom enfants du meme parent, tu serais bien embete !

Tu semble debuter, donc comme par te faire les dents avec le getChildByName, en tout cas de mon point de vue, c'est un bon point de depart ;)

#6 BriçouLeFou

    Ceinture Jaune

  • Members
  • PipPip
  • 20 messages

Posté 13 November 2012 - 23:39 PM

Je débute oui et non... :P
J'ai barboté de longues années dans Flash MX2004 et AS2, et animé une section d'un ancien forum pendant un temps aussi...
C'est juste le passage à l'AS3 qui est un peu dur, d'autant que je n'avais pas touché Flash depuis des lustres :D

Mais ta solution du conteneur "global" fonctionne niquel, je viens de tester, c'est génial :)

Merci encore ;)

#7 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6955 messages

Posté 14 November 2012 - 00:03 AM

En AS3 on utilise une displaylist pour afficher les objets.
Elle fonctionne comme un tableau ou plutôt comme une pile, les objets s'y entassent au fur et à mesure qu'on les y dépose.


stage.addChild(monConteneur1);
stage.addChild(monConteneur2);
stage.addChild(monConteneur3);
 

Chaque objet possède sa propre displaylist.


monConteneur1.addChild(monObjet1);
monConteneur1.addChild(monObjet2);
monConteneur1.addChild(monObjet3);
 

ect...

On peut aussi pré-trier ses objets à l'aide de tableaux :


var stockage:Array = [];

monConteneur1.addChild(monObjet1);
monConteneur1.addChild(monObjet2);
monConteneur1.addChild(monObjet3);

stockage.push(monObjet1);
stockage.push(monObjet2);
stockage.push(monObjet3);
 

Pour retrouver un objet je peux simplement aller le chercher dans le tableau au lieu d'essayer de le "pointer" dans son conteneur avec le chemin qui va avec etc....


trace(stockage[0]); // monObjet1
trace(stockage[1]); // monObjet2
trace(stockage[2]); // monObjet3
 

Outre le fait que c'est plus simple, car on se fout de savoir où se trouve l'objet (dans quel conteneur, à quel endroit dans la displaylist, etc... Flash retrouve son chemin tout seul), on peu se permettre de trier les tableau comme on veut (ce que ne permet pas la displaylist qui est toujours une pile, si on retire un objet à une position de la pile tout ce qui est au dessus descend pour combler le vide), et également de créer autant de tableaux utiles pour grouper des objets multiples au sein d'un même conteneur (je mets tous les fruits dans le tableau 1 et tous les légumes dans le tableau 2, si je cherches un fruit il est dans le tableau 1, mais je me fout de savoir si il est affiché dans le panier ou sur la table ou encore dans le panier qui est posé sur la nappe qui est sur la table, et qu'il s'appelle "pomme"....).

#8 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 14 November 2012 - 09:46 AM

+1 SPI pour la synthèse liste d'affichage/tableau

NB ne cherche pas d'objet displayList ce n'est qu'un anglicisme pour liste d'affichage, en revanche DisplayObject est bien une classe

---> []
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#9 BriçouLeFou

    Ceinture Jaune

  • Members
  • PipPip
  • 20 messages

Posté 14 November 2012 - 12:12 PM

Salut !

Merci beaucoup Monsieur Spi pour ces précisions, je tâcherais de m'en souvenir pour la suite, ce qui d'ailleurs devrait être relativement facile vu la clarté de l'explication ;)

Dans mon cas malgré tout, j'ai adopté la solution de draad (à savoir stocker mon objet simplementdans une variable et non dans un tableau), étant donné que je n'ai qu'un seul objet à stocker et que JE SUIS SUR ET CERTAIN qu'il n'y en aura pas d'autres, puisque je contrôle totalement le contexte (pas de chargement dynamique qui puisse intervenir sur ce plan là notamment).

Merci encore ;)
A+
Brice



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP