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 1 & ActionScript 2 Discussion :

Une boucle pour associer X actions à X checkbox


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Une boucle pour associer X actions à X checkbox
    Bonjour !! Ca faisait longtemps .... Alors voici mon problème du jour. Imaginez ma scène : dessus j'ai un clip "carte" dans lequel je charge 19 fichiers swf externe gràce à une boucle et ce que j'ai appris ici il y a quelques semaines. Chaque fichier est contenu dans un clip nommé "conteneur_1", "conteneur_2", "conteneur_3" ... Comme ça :

    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
    // ICI ON EST DANS LE CLIP "CARTE"
    var nbreCouchesLoad:Number = 19;
    var nomCouches:Array = ["fond", "r_feu_foret", "zone_industrielle", "pop_continu", "pop_discontinu", "r_inondation_faible", "r_inondation_moyen", "r_inondation_fort", "r_ruissellement", "r_tmd", "r_chute_blocs", "r_glissement", "r_industriel", "cadastre", "eau_secondaire", "eau_principal", "route_secondaire", "route_nationale", "voie_ferree"];
    var carteL0:Number = this._width;
    var carteH0:Number = this._height;
     
    function load(aIndex:Number) {
    	var tmp:MovieClip = this.createEmptyMovieClip("conteneur_"+aIndex, this.getNextHighestDepth());
     
    	var listener:Object = new Object();
    	listener.onLoadInit = initialisation;
     
    	var mcl:MovieClipLoader = new MovieClipLoader();
    	mcl.addListener(listener);
    	var fileName:String = "couches/"+ nomCouches[aIndex] +".swf";
    	mcl.loadClip(fileName, tmp);
    }
     
    function initialisation(aTarget:MovieClip) {
    	var currentIndex:Number = Number(aTarget._name.split("_")[1]);
    	if (currentIndex<nbreCouchesLoad-1) {
    		load(currentIndex+1)
    	}
    	aTarget._x = (0-(carteL0/2))+((carteL0-aTarget._width)/2);
    	aTarget._y = (0-(carteH0/2))+((carteH0-aTarget._height)/2);
    }
     
    load(0);
    Sur ma scène, j'ai aussi un clip "couches" qui contient un autre clip scrollable "txtscroll" dans lequel j'ai disposé 19 checkbox nommées "checkbox1", "checkbox2", "checkbox3" ... vous suivez ? Sur mon calque d'action, j'essaye de faire en sorte qu'1 checkbox X soit assigné à une couche X, pour qu'en cochant ça affiche la couche, et en décochant ça la masque. Pour ça, j'ai fait une boucle dans laquelle j'assigne un indice à chaque checkbox pour pouvoir effectuer une action différente en fonction de l'indice. Comme ça :

    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
    for(var i=1 ;i<19 ; i++){
    	var chkbox = this.couches.txtscroll["checkbox"+i];
    	chkbox.indice = i;
     
    	var listener2 = new Object();
     
    	listener2.click = function(evt){
    		if (chkbox.selected) {
    			//_root.carte["conteneur_"+i]._visible = true;
    			trace("OUI : "+ chkbox)
    		} else {
    			//_root.carte["conteneur_"+i]._visible = false;
    			trace("NON : " + chkbox)
    		}
    	}
     
    	chkbox.addEventListener("click",listener2);	
    }
    Le soucis est donc que ça ne fonctionne pas. Mon trace m'indique que le chkbox est "_level0.couches.txtscroll.checkbox18", quelle que soit la checkbox que je coche. Je ne vois pas THE solution !! Ou bien faut-il faire un listener différent pour chaque checkbox ? Mais comment ? Merci d'avance ... encore.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    ok je m'auto-réponds pour ceux que ça intéresse. En fait "chkbox" étant à l'exterieur de la fonction ecouter, c'était normal que ça plante. Il fallait récupérer la cible de l'élément qui déclenche l'évènement :

    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
    for(var i=1 ;i<19 ; i++){
    	var chkbox = this.couches.txtscroll["checkbox_"+i];
    	chkbox.selected = false;
     
    	var listener = new Object();
     
    	listener.click = function(evt){
    		var indice:Number = Number(evt.target._name.split("_")[1]);
    		if (evt.target.selected) {
    			_root.carte["conteneur_"+indice]._visible = true;
    			trace("OUI")
    		} else {
    			_root.carte["conteneur_"+indice]._visible = false;
    			trace("NON")
    		}
    	}
     
    	chkbox.addEventListener("click",listener);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 21
    Dernier message: 23/05/2007, 16h16
  2. je sais pas utilisé une boucle pour ?
    Par napz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2006, 01h09
  3. Réponses: 2
    Dernier message: 26/07/2006, 12h46
  4. [ImageMagick] Une boucle pour ImageLine ?
    Par isa150183 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/11/2005, 18h41

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