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

Flash Discussion :

DuplicateMovieClip et boucles


Sujet :

Flash

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Points : 163
    Points
    163
    Par défaut DuplicateMovieClip et chargement dynamique d'image
    Bonjour,

    Je souhaite créer un jeu de taquin mais sans utiliser les librairies déjà existantes, donc de A à Z.

    Voilà le principe de base :

    Une image est chargée depuis une URL puis découpée dynamiquement en cases qui seront aléatoirement dispersées dans la scène.

    Voilà l'ordre que je veux faire :

    - Charger l'image dans un movieClip
    - Dupliquer le movieClip pour chacune des cases dont j'ai besoin
    - Pour chaque nouveau movieClip (nommé 'Case' + i + j, i et j étant les coordonnées de la case), :
    ¤ placer un masque de la taille d'une case
    ¤ positionner et redimensionner le masque
    ¤ positionner le nouveau movieClip (Case + i + j) aléatoirement

    Seulement voilà le problème, mes duplicateMovieClip ne fonctionnent pas me voilà bien avancé pour la suite ^^.

    Ici, le trace me balance des undefined à gogo ^^

    Voici 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    stop();
     
    var width:Number = 600;
    var height:Number = 400;
    var background_picture:String;
    var xml_url:String = "http://localhost/******/external_ressources/images.xml";
    var xmlDoc= new XML();
    var nbLignes:Number = 6;
    var nbColonnes:Number = 6;
     
     
    xmlDoc.ignoreWhite = true;
     
    MovieClip.prototype.loadFile = function(file) {
     
    	conteneur = this.createEmptyMovieClip("conteneur", 100);
    	pic = conteneur.createEmptyMovieClip("img", 102);
    	crt = conteneur.createEmptyMovieClip("control", 103);
     
    	ldr = conteneur.attachMovie("loader", "loader", 104, {_xscale:100, _yscale:100, _x:-83, _y:0});
    	ldr.bar._xscale = 0;
    	pic.loadMovie(file);
     
    	crt.onEnterFrame = function() {
     
    		pic._visible = false;
     
    		transfert = Math.round(pic.getBytesLoaded()*100/pic.getBytesTotal());
    		ldr.bar._xscale = transfert;
     
    		if (pic.getBytesTotal()>4) {
    			if (pic.getBytesLoaded() == pic.getBytesTotal()) {
    				delete crt.onEnterFrame;
    				removeMovieClip(ldr);
    				pic._visible = true;
     
    				pic._xscale = width * 100 / pic._width;
    				pic._yscale = height * 100 / pic._height;
     
    				pic._x = - pic._width/2;
    				pic._y = - pic._height/2;
    				for(var i = 1 ; i <= nbColonnes ; i++){
    					for(var j = 1 ; j <= nbLignes ; j++){
    						conteneur.duplicateMovieClip(pic,"case" + i + j, 105 + (j-1) * nbColumns + i);
    						trace(conteneur['case'+i+j]._x);
    					}
    				}							
    			}
    		}		
    	};
    };
     
    xmlDoc.onLoad = function(){
    	background_picture = this.firstChild.childNodes[1].attributes.url;
    	bg_center.loadFile(background_picture);
    };
     
    xmlDoc.load(xml_url);
    nb: la seule frame de mon animation contient un movieClip 'bg_center' placé au centre.

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    No idea ?

  3. #3
    Membre émérite Avatar de dom_dev
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 073
    Points : 2 338
    Points
    2 338
    Par défaut
    bonjour,

    probablement que dans ton "imbrication" de fonctions, "conteneur" n'est pas trouvé. Le code que tu nous as envoyé est incomplet et ne marche pas de façon autonome on ne peut faire aucun test pour t'aider.

    Si la ou les réponses obtenues vous ont donné satisfaction n'oublier pas ->
    Et ne rajoutez pas de nouvelles questions éternellement dans le même post surtout si vous en n'êtes pas l'auteur
    MERCI

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    Alors.

    Après quelques investigation j'ai pu découvrir qu'en fait, quand un MovieClip utilise un loadMovie, il n'est pas possible de le dupliquer... Enfin c'est ce que j'ai compris.

    En pièce jointe, mon code tout prêt à marcher.

    Une solution serait de pouvoir mettre le MC chargé en mémoire (celui qui fait le loadMovie), un peu comme dans une bibliothèque. Qu'il ne soit pas vraiment un MC instancié mais plutôt un movieClip instanciable.

    J'ai regardé du côté des classes et de l'héritage de MovieClip, mais tout ce que je trouve m'oblige à charger autant de fois l'image que je souhaite de MC, et ça je ne peux pas me le permettre.

    Si quelqun à une idée

    Je rapelle que tout celà à pour objectif de créer un jeu de taquin. Autrement dit, découper une image en plusieurs carrés qu'on pourra mélanger. Mon idée étant d'avoir autant d'instance de l'image chargée que j'ai besoin de petits carrés, et de jouer sur les masques par la suite.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  2. Réponses: 1
    Dernier message: 28/07/2005, 15h21
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 11h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 10h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 21h43

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