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 :

[FLASH 8] Du probleme des langages asynchrones


Sujet :

Flash

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [FLASH 8] Du probleme des langages asynchrones
    Bonjour,
    dans un swf je charge un autre swf (merci encore Jean Philippe) mais voila comment ça se passe.
    Un parametre est passé par l url et est recuperé par mon loader (conteneur), celui ci va charger un doc php (qui renvoit du xml) et par rapport à ces valeurs va charger un swf different...
    Mon probleme vient du fait que lorsque je charge mon php, il semble que la méthode xml.ondata ou onload s execute de manière asynchrone ce qui signifie que je charge mon animation avant d avoir le retour des valeurs...
    ma question: est il possible de forcer l arret de l execution du code AS jusqu a ce qu un autre soit fini?

    j ai une petit idée avec les setInterval mais s il y a mieu je prend
    En espérant avoir été clair...merci

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    ben ... tu peux lancer le chargement de ton animation dans le onLoad. lorsque le onload se lance, les données sont deja chargées, tu est donc sur de pouvoir charger ton animation.

    moi c'est comme ca que je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //contenu qui ne nécessite pas de variables
    ...
    var monXml:Xml = new Xml();
    monXml.onLoad = function(success:Boolean) {
       if(success) {
          // charger le contenu qui nécessite les variables
          ...
     
      } else {
         // afficher erreur
         ...
      }
    }
    monXml.load("monfichier.php");
    Best Web Design Software ever - http://tweakstyle.com

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    oui du coup c est ce que j ai fait mais maintenant j ai un soucis concernant le chargement de mon swf contenu, certes j ai toutes mes variables mais j ai des doutes sur la "position" de la déclaration de mon objet MovieClipLoader

    exemple

    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
    var monXml:Xml = new Xml();
    monXml.onLoad = function(success:Boolean) {
       if(success) {
          // chargement des variables le contenu qui nécessite les variables
          loadGame();
      } 
    }
    monXml.load("monfichier.php");
    
    function loadGame(){
    
    	var loader:MovieClip=this.attachMovie("loader","loader_mc",this.getNextHighestDepth());
    	
    	loader._width=150;
    	loader._height=30;
    	loader._x=Stage.width/2-loader._width/2;
    	loader._y=Stage.height/2-loader._height/2;
    	
    	Stage.align = "TL";
    	this.createEmptyMovieClip("movieContener", this.getNextHighestDepth());
    	var mclListener:Object = new Object();
    	....
            var mcl:MovieClipLoader = new MovieClipLoader();
    	mcl.addListener(mclListener);
    	mcl.loadClip(gamePath, movieContener);	
    
    }
    bon , ce code ne fonctionne pas alors qu en l extrayant du code du chargement du xml, tout va bien, je pense que le probleme vient de l utilisation de "this" or je voudrais éviter d utiliser "_root" et l utilisation de "_parent" ne fonctionne pas non plus... que faire?

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    bonjour, c est bizarre, lorsque je load mon swf avec le movieClipLoader() ça marche, si je charge mon XML avec l objet XML, ça marche, mais si j appelle la méthode loadGame dans la function XML.onLoad()...ça marche plus du tout, je suppose qu il s agit su un probleme de portée mais je ne voit pas du tout comment faire...
    des idées?

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Donc
    - si je lance le chargement de mon XML, tout va bien j ai les valeurs chargées.
    - si je lance le chargement d un jeu (ici "jeu/jeu.swf"), tout va bien, mon movieClipLoader réagit bien et mon animation prend bien tout Stage.
    - si je lance le chargement de mon XML et que je lance le chargement de mon jeu quand le XML a fini de charger (XML.onLoad())... là ça ne marche plus du tout..
    voici le code en espérant que vous y voyez quelque chose peut être au 1er coup d oeil, ça fait 2jours que je suis dessus je ne comprend rien à ce qu il se passe.
    J ai même mis un setInterval pour être sûr que ce n est pas la portée qui me joue des tours mais bon...Merci

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    import mx.xpath.XPathAPI;
     
    //récupération variable passée en paramètre
    var gameId;
    gameId=this.idgame;
    var gamePath:String="jeu/jeu.swf";
    var debug;
    var isLoaded:Boolean;isLoaded=false;
    var compteur:Number=0;
    var IntervalID;
    //-----------------------------------------
     
    //chargement du XML de configuration
    var myXml:XML = new XML();
    var niveau;
    var gain;
    var itemsCol=new Array();
     
    myXml.ignoreWhite = true;
    myXml.onLoad  = function(success:Boolean) {
         if (success) {
              gamePath=XPathAPI.selectSingleNode(this.firstChild  ,"root/gamePath").firstChild;
              niveau =XPathAPI.selectSingleNode(this.firstChild,"root/niveau").firstChild;
              gain =XPathAPI.selectSingleNode(this.firstChild,"root/gain").firstChild;
              //parcours de la liste des items.
              var itemsNode = XPathAPI.selectNodeList(this.firstChild,"root/items/item");
              for (var i = 0; i < itemsNode.length; i++) {
                   itemsCol.push(itemsNode[i].firstChild);
              }
              trace("success!"+ gain + " " + niveau+ " " + gamePath);
              _root.isLoaded=true;trace("isLoaded= "+isLoaded);
         }
    }
    myXml.onHTTPStatus = function(httpStatus:Number) {
         trace("onHTTPStatus :" + httpStatus);
    }
    myXml.load("../loadXML.xml");
     
    IntervalID=setInterval(this,"testIsLoaded",10);
    function testIsLoaded(){
         compteur++;
         trace(compteur);
         if (isLoaded){
              clearInterval(IntervalID);
              loadGame();
         }
    }
     
    function loadGame(){
         trace("debut");
         mcl.loadClip(gamePath, movieContener);
    }
     
    //barre de preloading
    var loader:MovieClip=attachMovie("loader","loader_mc",1);
    loader._width=150;
    loader._height=30;
    loader._x=Stage.width/2-loader._width/2;
    loader._y=Stage.height/2-loader._height/2;
    Stage.align = "TL";
     
    createEmptyMovieClip("movieContener", this.getNextHighestDepth());
    var mclListener:Object = new Object();
     
    //ecouteur de resize de la scene
    var StageListener:Object = new Object();
    StageListener.onResize = function() {
         movieContener._height = Stage.height;
         movieContener._width = Stage.width;
    };
    Stage.addListener(StageListener);
     
    //preloader
    mclListener.onLoadInit = function(target_mc:MovieClip) {
         target_mc._height = this.Stage.height;
         target_mc._width = this.Stage.width;
         trace("mc onLoadInit");
    }
     
    mclListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
         loader.moveMe(bytesLoaded / bytesTotal);
         loader.swapDepths(this.getNextHighestDepth());
         this.txt.text="loaded" + bytesLoaded + " " +  bytesTotal;
    }
    mclListener.onLoadError  = function(target_mc:MovieClip, errorCode:String, httpStatus:Number){
         this.txt.text="error" + errorCode + " " +  httpStatus;
    }
    mclListener.onLoadStart = function(target_mc:MovieClip) {
         this.txt.text="onLoadStart";
    }
     
    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(mclListener);

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Salut

    Tu n'as pas essayé de placer ton loadGame directement dans ton onLoad?

    Je suis dans la même galère que toi dans le chargement des XML?

    S'il te plaît regarde mon post :

    http://www.developpez.net/forums/sho...d.php?t=230152

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    si bien sûr que j ai essayé mais ça n a pas marché, cest pour ça que j ai utilisé une variable flag avec un setInterval mais ça ne fonctionne pas non plus...comprend pas

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Salut,
    J'ai fait une réponse sur mon post qui peut-être peut t'aider à trouver une solution.

    http://www.developpez.net/forums/sho...d.php?t=230152

    Chau

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Il n'appelle pas du tout ton loadGame ou l'appel se fait quand même?

  10. #10
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    Salut,

    Essaie voir comme ca
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import mx.xpath.XPathAPI;
     
    var me:MovieClip = this;
     
    //récupération variable passée en paramètre
    var gameId;
    gameId=this.idgame;
    var gamePath:String="jeu/jeu.swf";
    var debug;
    var isLoaded:Boolean;isLoaded=false;
    var compteur:Number=0;
    var IntervalID;
    //-----------------------------------------
     
    //chargement du XML de configuration
    var myXml:XML = new XML();
    var niveau;
    var gain;
    var itemsCol=new Array();
     
    myXml.ignoreWhite = true;
    myXml.onLoad  = function(success:Boolean) {
         if (success) {
              gamePath=XPathAPI.selectSingleNode(this.firstChild  ,"root/gamePath").firstChild;
              niveau =XPathAPI.selectSingleNode(this.firstChild,"root/niveau").firstChild;
              gain =XPathAPI.selectSingleNode(this.firstChild,"root/gain").firstChild;
              //parcours de la liste des items.
              var itemsNode = XPathAPI.selectNodeList(this.firstChild,"root/items/item");
              for (var i = 0; i < itemsNode.length; i++) {
                   itemsCol.push(itemsNode[i].firstChild);
              }
              trace("success!"+ gain + " " + niveau+ " " + gamePath);
              me.loadGame();
         }
    }
    myXml.onHTTPStatus = function(httpStatus:Number) {
         trace("onHTTPStatus :" + httpStatus);
    }
     
    //barre de preloading
    var loader:MovieClip=this.attachMovie("loader","loader_mc",1);
    loader._width=150;
    loader._height=30;
    loader._x=Stage.width/2-loader._width/2;
    loader._y=Stage.height/2-loader._height/2;
    Stage.align = "TL";
     
    var conteneur:MovieClip = this.createEmptyMovieClip("movieContener", this.getNextHighestDepth());
    var mclListener:Object = new Object();
     
    //ecouteur de resize de la scene
    var StageListener:Object = new Object();
    StageListener.onResize = function() {
         movieContener._height = Stage.height;
         movieContener._width = Stage.width;
    };
    Stage.addListener(StageListener);
     
    //preloader
    mclListener.onLoadInit = function(target_mc:MovieClip) {
         target_mc._height = this.Stage.height;
         target_mc._width = this.Stage.width;
         trace("mc onLoadInit");
    }
     
    mclListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
         loader.moveMe(bytesLoaded / bytesTotal);
         loader.swapDepths(this.getNextHighestDepth());
         this.txt.text="loaded" + bytesLoaded + " " +  bytesTotal;
    }
    mclListener.onLoadError  = function(target_mc:MovieClip, errorCode:String, httpStatus:Number){
         this.txt.text="error" + errorCode + " " +  httpStatus;
    }
    mclListener.onLoadStart = function(target_mc:MovieClip) {
         this.txt.text="onLoadStart";
    }
     
    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(mclListener);
     
    function loadGame(){
         trace("debut");
         mcl.loadClip(gamePath, conteneur);
    }
     
    myXml.load("../loadXML.xml");
    Aussi, pense vraiment à typer toutes tes variables ! Pas juste une de temps en temps Sinon cela ne sert pas à grand chose...

    @++
    Libzippp (C++)
    Lost in AStorm

  11. #11
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    non ça ne marche pas, la réaction est la même, je ne comprends rien à ce qu il se produit, je vous joins les fichiers sources directement ici, peut être que cela sera plus simple
    Merci pour votre aide en tout cas!

Discussions similaires

  1. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 13h12
  2. [FLASH MX 2004]-probleme de recursivité.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 10/05/2004, 20h48
  3. [FLASH MX 2004] probleme impression
    Par dens63 dans le forum Flash
    Réponses: 6
    Dernier message: 30/04/2004, 15h29
  4. probleme des utilisateurs
    Par frome dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 24/03/2004, 16h10

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