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 :

Charger x fois un clip en lignes et colonnes définies


Sujet :

ActionScript 1 & ActionScript 2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Charger x fois un clip en lignes et colonnes définies
    Bonjour, je cherche à charger sur ma scène un même clip x fois, en fonction d'un nombre de ligne et de colonne que je définis au début. J'ai donc essayé de faire une double boucle pour charger la colonne1-ligne1, colonne1-ligne2 ... mais sans succès. Voici le code que j'ai tenté, si vous avez une idée je suis preneur. Merci d'avance.

    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
    29
    30
    31
    var nbreColonne:Number = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
    var colonne:Number = 0; // Initialisation de la variable
    var nbreLigne:Number = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
    var ligne:Number = 0; // Initialisation de la variable
    var tailleDalle:Number = 160;
     
    for(colonne ; colonne<nbreColonne ; colonne++){
    	for(ligne ; ligne<nbreLigne ; ligne++){
    		load(ligne);
    	}
    }
     
    function load(aIndex:Number) {
    	var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+aIndex, aIndex);
     
    	var listener:Object = new Object();
    	listener.onLoadInit = initialisation;
     
    	var mcl:MovieClipLoader = new MovieClipLoader();
    	mcl.addListener(listener);
    	var fileName:String = "fonds/BlocFond.swf";
    	mcl.loadClip(fileName, tmp);
    }
     
    function initialisation(aTarget:MovieClip) {
    	var currentIndex:Number = Number(aTarget._name.split("_")[1]);
    	aTarget._width = tailleDalle;
    	aTarget._height = tailleDalle;
    	aTarget._x = 160*colonne; // pour que le clip 2 se charge sous le clip 1, ect ...
    	aTarget._y = 160*ligne;
    }
    L'objectif est donc que le clip1 se charge en haut à gauche, le clip 2 en dessous du 1, le 3 en dessous du 2 ... jusqu'au 8, puis le 9 en haut à droite du 1, etc ...

  2. #2
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Salut,

    dans ce cas tu n'as pas besoin que tel ou tel clip soit au dessus d'un autre vu qu'ils ne se chevauchent pas.

    j'ai modifié un peu ton code qui devrai fonctionner mais la façon de faire était bonne.

    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
    29
    30
    31
    32
    _level0.nbreColonne = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
    _level0.nbreLigne = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
    _level0.tailleDalle = 160;
     
    for(var c=0;c<nbreColonne;c++)
    {
        for(var r=0;r<nbreLigne;r++)
        {
            loadClip(c,r);
        }
    }
     
    function loadClip(nColumn:Number, nRow:Number)
    {
        var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
     
        var listener:Object = new Object();
        listener.onLoadInit = initialisation;
     
        var mcl:MovieClipLoader = new MovieClipLoader();
        mcl.addListener(listener);
        var fileName:String = "fonds/BlocFond.swf";
        mcl.loadClip(fileName, tmp);
    }
     
    function initialisation(mcTarget:MovieClip, nColumn:Number, nRow:Number)
    {
        mcTarget._width =_level0.tailleDalle;
        mcTarget._height = _level0.tailleDalle;
        mcTarget._x = _level0.tailleDalle*nColumn;
        mcTarget._y = _level0.tailleDalle*nRow;
    }
    ;)

  3. #3
    Membre éclairé
    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
    Par défaut
    salut ! alors j'ai essayé ton code, mais les différents clips ne se positionnent pas correctement, ils restent tous en 0,0 apparemment dans la fonction initialisation les variables nColumn et nRow sont UNDEFINED !! Par contre au niveau des conteneurs tout se charge nickel. De mon côté entre temps j'ai réussi à faire ce que je voulais, non pas en chargeant un clip externe, mais en attachant le clip préalablement intégré dans la bibliothèque. J'ai fonctionné différemment, au lieu de traiter lignes et colonnes, j'ai déterminé le nombre de fois que je voulais le clip, et j'ai forcé à la ligne en fonction de ça ... Mon code :

    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
    var nbreDalle:Number = 64;
    var nbreColonne:Number = 8;
    var tailleDalle:Number = 160;
    var startX:Number = 0;
    var startY:Number = 0;
     
    maillage = function () {
    	for (var i=1; i<=nbreDalle; i++) {
    		this.Carte.attachMovie("dalle", "dalle"+i, i);
    		this.Carte["dalle"+i]._x = startX;
    		this.Carte["dalle"+i]._y = startY;
    		startY += tailleDalle;
    		if (startY >= tailleDalle * nbreColonne) {
    			startY = 0;
    			startX += tailleDalle;
    		}
    	}
    }
     
    maillage();
    A ton avis, quelle solution vaut-il mieux adopter dans ce genre de situation ?

  4. #4
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Salut,

    si le seul changement est de ne pas charger un clip externe mais à partir de la bibliothèque,

    tu peux garder le code précédent (en fait c'est comme ça que je l'avais testé)

    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
    _level0.nbreColonne = 8; // NOMBRE DE COLONNE QUE JE DEFINIS
    _level0.nbreLigne = 8;  // NOMBRE DE LIGNE QUE JE DEFINIS
    _level0.tailleDalle = 160;
     
    for(var c=0;c<nbreColonne;c++)
    {
        for(var r=0;r<nbreLigne;r++)
        {
            loadClip(c,r);
        }
    }
     
    function loadClip(nColumn:Number, nRow:Number)
    {
        var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
     
        tmp.attachMovie("dalle", "dalle"+nColumn+"-"+nRow,tmp.getNextHighestDepth());
        initialisation(tmp,nColumn,nRow);
    }
     
    function initialisation(mcTarget:MovieClip, nColumn:Number, nRow:Number)
    {
        mcTarget._width =_level0.tailleDalle;
        mcTarget._height = _level0.tailleDalle;
        mcTarget._x = _level0.tailleDalle*nColumn;
        mcTarget._y = _level0.tailleDalle*nRow;
    }

  5. #5
    Membre éclairé
    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
    Par défaut
    ok ça fonctionne nickel comme ça ! Abuserais-je en sollicitant ton aide pour une autre question complètement liée à la première ? .

    Dans le fonctionnement, j'ai mon clip qui se place donc 64 fois sur la scène, en formant un quadrillage de 8x8 avec pour chaque clip un nom du genre :
    _level0.Carte.dalle_0x0
    _level0.Carte.dalle_0x1
    _level0.Carte.dalle_0x2
    (...)
    _level0.Carte.dalle_7x5
    _level0.Carte.dalle_7x6
    _level0.Carte.dalle_7x7.

    Sur ma scène j'ai placé également un simple clip carré. Ce que je veux faire c'est que lorsque qu'un des clips "dalle" touche le clip carré, à l'intérieur de ce clip "dalle" se charge une image qui elle est externe. C'est à dire que j'ai 64 images que je vais nommer image_0x0, image_0x1 ... et lorsque la dalle_0x2 touche le carré ça lance le processus de chargement. Pour ça, j'ai mis dans une frame du clip source attaché "dalle" le code suivant :

    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
     
    var visibleDalle:Boolean = false;
     
    this.onEnterFrame = function () {
    	if (this.hitTest(_root.Carré) && visibleDalle == false) {
    		visibleDalle = true;
    		load();
    	}
    }
     
    function load() {
    	var tmp:MovieClip = this.createEmptyMovieClip("image", this.getNextHighestDepth());
     
    	var listener:Object = new Object();
     
    	var mcl:MovieClipLoader = new MovieClipLoader();
    	mcl.addListener(listener);
    	var fileName:String = "fonds/image_0x2.jpg"; // IL FAUT RECUPERER ICI LE NOM DE LA DALLE (ex : "fonds/image_" + NOMDALLE + ".jpg")
    	mcl.loadClip(fileName, tmp);
    }
    Mais comment récupérer le nom de la dalle source afin de savoir quelle image il faut charger ? Merci !

  6. #6
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    tu peux mémoriser la ligne et la colonne dans le clip conteneur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tmp:MovieClip = this.mcCarte.createEmptyMovieClip("conteneur_"+nColumn+"-"+nRow, this.mcCarte.getNextHighestDepth());
    tmp.col = nColumn;
    tmp.row = nRow;
    puis les récupérer ensuite pour faire selon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    this.onEnterFrame = function () {
        if (this.hitTest(_root.Carré) && visibleDalle == false) {
            visibleDalle = true;
            trace(_parent.row + " - " + _parent.col);
            load();
        }
    }

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

Discussions similaires

  1. [XL-2007] Sous_total somme et moyenne à la fois dans une meme ligne
    Par hadi2007 dans le forum Excel
    Réponses: 1
    Dernier message: 09/02/2012, 15h04
  2. AMFPHP qui ne fonctionne pas une fois mon swf en ligne
    Par Grimdol dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 24/04/2009, 12h20
  3. plus de clips en ligne (donc plus d'images)
    Par daucle dans le forum Flash
    Réponses: 0
    Dernier message: 30/10/2008, 16h35
  4. charger 2 fois la même DLL
    Par phildas dans le forum Windows
    Réponses: 1
    Dernier message: 10/09/2008, 22h49

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