Forums Développement Multimédia

Aller au contenu

Fonction imbriquée ....

CODE Actionscript

6 réponses à ce sujet

#1 tchup113

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 120 messages

Posté 02 June 2005 - 14:23 PM

Bonjour,

J'essaye de faire une fonction qui scanne l'arborescence des movieClip à partir d'une cible quelqconque (_level0, unMC_mc, ....)
Donc en résumé, j'essaye d'éxecuter une fonction A dans cette même fonction A.
Cependant, ça ne marche pas .... icon_neutral.gif

Voici mon code :
ActionScript
static function listingMC(cible:MovieClip) {
//
var all_clip:String = "";
all_clip += "-------------------------------------------------------------------"+newline;
all_clip += "Arborecence des MovieClip à partir de : "+cible+newline;
all_clip += "-------------------------------------------------------------------"+newline;
//
function niveau_complet(clip:MovieClip) {
//
for (var i in clip) {
// test si l'élément est un MovieClip
if (clip[i] instanceof MovieClip) {
var decalage:String = "";
var split_array:Array = String(clip).split(".");
// création du décalage pour chaque niveau dans l'arborescence
for (var niveau = 0; niveau<(split_array.length-1); niveau++) {
decalage += " | ";
}
all_clip += decalage+" > ("+clip[i].getDepth()+") "+clip[i]._name+newline;
// on recherche si cet mc a des sous-mc
niveau_complet(clip[i]);
}
}
}
//
niveau_complet(cible);
trace(all_clip);
//return all_clip;
}

Ici je n'arrive pas à rééxécuter niveau_complet() avec un nouvel argument.
Vous voyez pourquoi ?

@+ icon_eek.gif

#2 niko

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3995 messages

Posté 02 June 2005 - 14:36 PM

ChezMoiCaMarche.com :
ActionScript
class MaClass
{
public static function listingMC (cible : MovieClip) : Void
{
//
var all_clip : String = "";
all_clip += "-------------------------------------------------------------------" + newline;
all_clip += "Arborecence des MovieClip à partir de : " + cible + newline;
all_clip += "-------------------------------------------------------------------" + newline;
//
var niveau_complet = function (clip : MovieClip)
{
//
for (var i in clip)
{
// test si l'élément est un MovieClip
if (clip [i] instanceof MovieClip)
{
var decalage : String = "";
var split_array : Array = String (clip).split (".");
// création du décalage pour chaque niveau dans l'arborescence
for (var niveau = 0; niveau < (split_array.length - 1); niveau ++)
{
decalage += " | ";
}
all_clip += decalage + " > (" + clip [i].getDepth () + ") " + clip [i]._name + newline;
// on recherche si cet mc a des sous-mc
niveau_complet (clip [i]);
}
}
}
niveau_complet (cible);
trace (all_clip);
}
}

ActionScript
import MaClass;
MaClass.listingMC(this);
/*
-------------------------------------------------------------------
Arborecence des MovieClip à partir de : _level0
-------------------------------------------------------------------
> (-16380) instance4
| > (-16382) instance5
| | > (-16382) instance6
> (-16383) instance1
| > (-16382) instance2
| | > (-16382) instance3
 
*/


#3 tchup113

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 120 messages

Posté 02 June 2005 - 14:55 PM

Moi j'ai ce message d'erreur dans mon panneau de sortie :

256 niveau(x) de récursion ont été dépassés dans une liste d'actions.
Il s'agit probablement d'une boucle infinie.
L'exécution d'actions a été désactivée dans cette animation.


alors que je viens de copier/coller ton code.... icon_evil.gif

Petite précision : MaClass.listingMC(_level0); est exécuté depuis un onRelease

icon_sad.gif

#4 niko

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3995 messages

Posté 02 June 2005 - 15:06 PM

Il se peut alors que tu ai beaucoup trop de mc et sous mc ... dans ce cas, je ne vois pas comment faire sinon stocker en amont tout les mc crées dans un array .. et dans un autre array, mettre le nom de son parent ...

#5 tchup113

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 120 messages

Posté 02 June 2005 - 15:21 PM

icon_neutral.gif je n'ai que 3 niveaux avec une dizaine de mc !!!



#6 daemon

  • Members
  • PipPipPipPipPipPipPipPip
  • 1764 messages

Posté 02 June 2005 - 15:27 PM

Salut. En effet il est possible que se soit le nombre de sous clip qui bloque mais bon...Il est aussi possible que tu ais une variable par exemple toto=this._parent pour faire boucler tout ton bordel à l'infini.

Sinon essaye juste avec un tableau.

Code

function scan(cible){
    var listToScan=[cible]
    while(listToScan.length){
         var clip=listToScan.pop()
          trace(clip)
         for(var nom in clip){
               if(typeof clip[nom]=="movieclip"){
                   listToScan.push(clip[nom]);
               }
         }
    }
}
scan(_root)






#7 titi2027

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 335 messages

Posté 03 June 2005 - 10:54 AM

Si tu as des composants v2, il va partir en récursif... il faut les éviter, lors de boucles réccursives...



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