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 XML


Sujet :

Flash

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 31
    Points
    31
    Par défaut duplicateMovieClip et XML
    Bonjour,


    QUESTION N°1 :

    j'ai un MovieClip principal, m, sur lequel je souhaite afficher une mosaique de 100 petits MovieClips.
    Pour cela je souhaite dans un premier temps charger test.swf dans le MovieClip modele que j'ajoute à m.
    Ensuite,je duplique modele 100 fois avec duplicateMovieClip, et j'ajoute les tile ainsi créés à m.

    modele est créé correctement, mais les tile n'apparaissent pas.

    Voici le code source :

    function initTiles(m:MovieClip) {

    m.createEmptyMovieClip("modele",0);
    m["modele"].loadMovie("fla/data/images/test.swf");
    m["modele"]._x=-100;
    m["modele"]._y=-100;

    var i:Number;
    var j:Number;
    var index:Number;

    for(i=0;i<10;i++) {
    for (j=0;j<10;j++) {
    index=10*j+i+1;
    m["modele"].duplicateMovieClip("tile"+index, index);
    m["tile"+index]._x=i*100;
    m["tile"+index]._y=j*100;

    m["tile"+index].width=100;
    m["tile"+index].height=100;
    }
    }


    QUESTION N°2

    J'essaie de charger un simple attribut width d'un fichier XML, mais lorsque je "trace" l'attribut lu, Flash affiche "undefined". Pourtant, si je rajoute une simple fonction associée au "onLoad" de document, et que je trace width DANS cette fonction, ça marche.

    Pourquoi l'attribut n'est-il pas lu correctement sans le onLoad???

    document=new XML(); //création de l'objet XML
    document.ignoreWhite=true; //ignorer les sauts de ligne

    document.load(file); //charge le document

    //affiche l'attribut "width" du noeud principal
    trace(document.firstChild.attributes.width);

    Merci d'avance!

  2. #2
    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
    bonsoir,

    pour la question n°2:

    document.load(file); //charge le document

    //affiche l'attribut "width" du noeud principal
    >>> à condition que "document" soit fini de charger ce qui n'est certainement pas le cas
    trace(document.firstChild.attributes.width);
    il faut définir la méthode "document.onLoad"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    document.onLoad = function(ok:Boolean) {
      if (ok) {
    	trace(document.firstChild.attributes.width);
                 //ou toute autre action
      }
    }
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    il faut définir la méthode "document.onLoad"

    En effet, ça marche avec un onLoad.

    Mais se pose alors le problème de la visibilité des variables :
    ...dans la fonction onLoad, je n'ai accès qu'aux attributs de l'objet document. Or je souhaitais placer la valeur chargée depuis document dans l'attribut "width" d'une classe "Map" qui contient une méthode "load". C'est cette méthode load qui appelle document.load.

    (voir ci dessous)

    class scripts.Map {

    var width:Number;

    function loadMap(file:String) {
    document=new XML(); //création de l'objet XML

    document.onLoad = function(success) {
    if(success){
    trace(this.firstChild.attributes.width);
    //ICI, JE N'AI PAS ACCES AU "WIDTH" DE
    LA CLASSE MAP

    }
    }
    document.load(file); //charge le document
    }
    }

    Une fois dans le onLoad, je ne "vois" plus "Map.width"...

    Merci

  4. #4
    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,

    en fait je crois que tu te complique la vie pour rien. Une fois que tu as chargé ton fichier dans l'objet XML "document" tu peux utiliser celui ci n'importe où et n'importe quand dans ton animation.
    Action script ce n'est pas "java" même s'il essaye de le faire croire. C'est beaucoup plus simple. Sur une frame que tu nommes pour la beauté de la chose "initXML" (par exemple) tu charges ton fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    datasURL = "monRepertoire/fonFichier.xml";
    var datasXML:XML = new XML();
    datasXML.ignoreWhite = true;
    datasXML.onLoad = function(ok) {
      if (ok) {
    	gotoAndStop("display");
      }
    }
    datasXML.load(datasURL);
    J'ai nommé une autre frame (un peu plus loin dans mon animation) "display" et sur cette frame je peux exploiter "datasXML.firstChild.attributes.width" Si j'ai un objet je peux sans problème atteindre un de ces attributs "objet.attribut = datasXML.firstChild.attributes.width;" bien sur en java on fait ça avec une méthode set et get sur des attributs "private" mais flash est pour l'instant plus permissif (profites en ça va pas durer! )

    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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par dom_dev
    Une fois que tu as chargé ton fichier dans l'objet XML "document" tu peux utiliser celui ci n'importe où et n'importe quand dans ton animation.
    (...)
    J'ai nommé une autre frame (un peu plus loin dans mon animation) "display" et sur cette frame je peux exploiter "datasXML.firstChild.attributes.width"
    Ce que tu dis est valable car tu fais référence à du "code de frame", c'est-à-dire écrit "dans" la frame, et c'est donc du code "global".
    Par conséquent les variables déclarées dans ce code sont elles aussi globales :
    je peux en effet accéder à "document" et à "datasXML" de n'importe où.

    En revanche, mon code se situe dans des méthodes de classes, et donc les variables que j'y déclare sont des variables locales à ces méthodes.
    J'ai essayé d'y accéder depuis le code exécuté dans "onLoad", et, sauf erreur de ma part, ces variables locales ne sont pas reconnues à cet endroit.



    ...Mais j'avoue que j'ai beaucoup de mal à m'y repérer dans la permissivité de Flash (je m'arrache les cheveux à comprendre pourquoi parfois les variables sont undefined et parfois non), donc peut-être que quelque chose m'échappe encore?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    REMARQUE : j'ai obtenu la réponse à la question n°1 sur un autre forum.

    La méthode "duplicateMovieClip" ne fonctionne pas avec un clip chargé depuis un fichier externe .swf ! (cf. la doc de Flash)


    ...merci ActionScript!

Discussions similaires

  1. xml -> xsl -> xml
    Par virgile04 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/10/2002, 16h53
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29
  3. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 17h48
  4. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07
  5. Pas de casse dans les XML
    Par :GREG: dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 13h51

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