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 MX 2004] proloader multiples et multi niveaux [Fait]


Sujet :

Flash

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut [FLASH MX 2004] proloader multiples et multi niveaux
    bonjour a tous,

    je cherches grosso modo a faire un miniature d'un document pdf a partir d'images, le tout dans un clip, de telle sorte que l'on se deplace automatiquement sur ce miniature sur certains evenements.
    Le probleme est que les images seront relativement volumineuses et il y aura de nombreuses pages dans ce miniature :\
    donc je me suis dit: qu'a cela ne tiennes, je ne chargerais pas toutes les images du document, mais seulement l'image / page courante et les images / pages adjacente, le tout dynamiquement.
    Voila pour mon probleme

    Maintenant ma solution: j'ai un fichier test.swf qui contient un occurence de mon Clip clip appelé conteneur_mc; ce clip me sert a charger le clip appelé miniature.swf, la miniature de mon fichier.
    Ce fichier miniature.swf contient 3 occurences d'un Clip clip qui vont servir de clip conteneur pour les 3 images chargées dynamiquement, appelés respectivement image1_mc, image2_mc et image3_mc.

    Le probleme maintenant: je ne sais pas vraiment comment organiser les loaders :s pour le loader du clip conteneur_mc du fichier test.swf, j'ai placé le code suivant:
    - image 1 du calque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    loadMovie("miniature.swf","conteneur_mc");
    le loader est chargé par un clip qui me sert seulement a ca et qui contient le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    onClipEvent (enterFrame) {
        if (_parent.getBytesLoaded()>=_parent.getBytesTotal()) {
           this.unloadMovie();
           _parent.play();
        }
    }
    - image 2 du calque:
    Maintenant comment et ou dois je placer le loader pour les loadMovie pour mes 3 images a charger?
    et je bloque aussi sur la facon dont je dois charger mes images dans mes clip conteneurs de mon fichier miniature.swf
    voila j'espère avoir été clair dans l'enoncé de mon probleme, mais j'ai rajouté les sources de mon projet en ligne sur: http://www.phplibrairies.com/flash/
    merci de votre aide dans cette tache ardue qu'est l'apprentissage de flash

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

    bon tout d'abors oublie tout de suite les on(...) et onClipEvent(...) !!! C'est obsolète depuis MX On met tout le code sur la timeline et on utilise la synthaxe pointée pour cibler les movieclip que l'on nomme

    Ensuite dans MX2004 tu as 2 possibilités : soit tu fait une classe de Preloader en AS2 soit tu fait un prototype en as1. Mais comme tu as procédé la c'est pas top car tu dois faire un preloader pour chacun de tes clips

    Je te donne un exemple simple de preloader en prototype :
    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
    MovieClip.prototype.load = function(fileToLoad:String)
    {
      var prof:Number = this.getNextHighestDepth();
      var control:MovieClip = this.createEmtyMovieClip("preload"+prof, prof);
     
      this.loadMovie(fileToLoad);
     
      control.onEnterFrame = function()
      {
        if (this._parent.getBytesLoaded() == this._parent.getBytesTotal())
        {
          //statment
        }
      }
    }
    Bon bien sur tu peux modifier tt ca à ta gise après il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monClipOuJeVeuxLoader.load("file.swf");
    et hop réutilisable pour tous tes clips

    @++

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    salut

    tout d'abord, merci pour ta reponse. Comme a chaque fois, elle m'apporte source d'avancement :p
    Citation Envoyé par thecaptain
    bon tout d'abors oublie tout de suite les on(...) et onClipEvent(...) !!! C'est obsolète depuis MX On met tout le code sur la timeline et on utilise la synthaxe pointée pour cibler les movieclip que l'on nomme
    heu , la je veux bien, mais j'ai pas tout compris tu peux me donner un exemple ?

    Citation Envoyé par thecaptain
    Ensuite dans MX2004 tu as 2 possibilités : soit tu fait une classe de Preloader en AS2 soit tu fait un prototype en as1. Mais comme tu as procédé la c'est pas top car tu dois faire un preloader pour chacun de tes clips
    ca je suis tout a fait d'accord, c'est pas terrible

    Citation Envoyé par thecaptain
    Je te donne un exemple simple de preloader en prototype :
    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
    MovieClip.prototype.load = function(fileToLoad:String)
    {
      var prof:Number = this.getNextHighestDepth();
      var control:MovieClip = this.createEmtyMovieClip("preload"+prof, prof);
     
      this.loadMovie(fileToLoad);
     
      control.onEnterFrame = function()
      {
        if (this._parent.getBytesLoaded() == this._parent.getBytesTotal())
        {
          //statment
        }
      }
    }
    Bon bien sur tu peux modifier tt ca à ta gise après il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monClipOuJeVeuxLoader.load("file.swf");
    et hop réutilisable pour tous tes clips
    j'aimerai bien pouvoir faire ce genre de choses, mais je suis limité au flash player v 5 voir 6 mais pas le 7 ca c'est sur ;(
    donc tout ce qui touche a la profondeur, je peux pas gerer
    et c'est quoi que tu attends dans le statement?
    je suis un peu perdu entre les differentes versions de flash, les player, ...
    j'essaie de me documenter au max, mais je suis de formation d'info de gestion, pas de graphiste, et c'est vrai que le coté gestion de scenario, etc me parles pas beaucoup :p

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

    si tu es limité au flash player 6 ne mets pas MX2004 dans le titre
    bon ceci dit statment est le mot englais pour instructions donc tu peux mettre ce que tu veux comme instruction ^^

    Ensuite, meme si tu es limité au flashplayer 6, les prototype sont tout à fait valides mais quand tu dis
    tout ce qui touche a la profondeur, je peux pas gerer
    heuuu la je pige pas... dans le 6 et meme le 5 tu peux gérer... bon je sais que la méthode getNextHighestDepth n'est disponible que dans le 7 mais dans le 6 tu as sauf erreur une méthode getInstanceNameAtDepth (un truc dans le genre je ne sais plus). Avec une boucle, tu peux tester la prochaine profondeur libre

    Un exemple de code sans les on(..) ? pas de prob :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //tu nommes ton bouton sur la scène et sur une frame du meme niveau tu fait :
    monBouton.onRelease = function()
    {
      trace("ca marche !");
    }
    simple non ?

    mais je suis de formation d'info de gestion
    tu as suivi ou cette formation ?

    @++

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par thecaptain
    si tu es limité au flash player 6 ne mets pas MX2004 dans le titre
    bon ceci dit statment est le mot englais pour instructions donc tu peux mettre ce que tu veux comme instruction ^^
    ok, je m'en souviendrais pour la prochaine fois
    je te dis, je debute sous flash, et j'ai beau potasser les docs, les tutos, l'aide, j'ai beau faire de mon mieux, ca m'avance pas des masses

    Citation Envoyé par thecaptain
    Ensuite, meme si tu es limité au flashplayer 6, les prototype sont tout à fait valides mais quand tu dis
    tout ce qui touche a la profondeur, je peux pas gerer
    heuuu la je pige pas... dans le 6 et meme le 5 tu peux gérer... bon je sais que la méthode getNextHighestDepth n'est disponible que dans le 7 mais dans le 6 tu as sauf erreur une méthode getInstanceNameAtDepth (un truc dans le genre je ne sais plus). Avec une boucle, tu peux tester la prochaine profondeur libre
    pour la gestion des profondeurs, moi je vois que:

    getNextHighestDepth => flash 7, on oublie
    getInstanceAtDepth => de meme
    getDepth => flash 6; cela voudrait dire qu'il faudrait que je boucle sur l'ensemble des niveaux pour recuperer l'ensemble des clips associés a tous les niveau pour determiner la valeur max? c'est pas très propre et surtout pas très optimisé je trouve
    swapDepths => 5, mais je vois pas bien l'utilisation que je peux en faire pour recuperer la prochaine profondeur

    Citation Envoyé par thecaptain
    Un exemple de code sans les on(..) ? pas de prob :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //tu nommes ton bouton sur la scène et sur une frame du meme niveau tu fait :
    monBouton.onRelease = function()
    {
      trace("ca marche !");
    }
    simple non ?
    oui effectivement pour les gens qui connaissent un peu flash non serieusement c'est un beau bazar entre les différentes versions de flash, les différentes versions d'actionscript...
    si tu n'as pas de notions de calques, timeline, etc, c'est chaud ; j'essaie, mais ca s'embrouille vite :p

    Pour en revenir a mon probleme, je suis partir de ton exemple de fichier de chargement; en ne tenant pas compte de la gestion de la profondeur, je me pencherais sur ce probleme apres. j'ai donc :
    - supprimé mon calque vide dans mon fichier testminiature.swf qui me servait seulement au loading
    - remplacé le code de l'image 1 par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "preloader.as"
    conteneur_mc.load("miniature.swf");
    conteneur_mc.image1_mc.load("img1.jpg");
    conteneur_mc.image2_mc.load("img1.jpg");
    conteneur_mc.image3_mc.load("img1.jpg");
    Donc le fichier swf est bien chargé puisque j'ai bien mes 3 calques de mon fichier miniatures.swf qui sont chargés; seulement Aucune des trois images ne sont chargés; Au niveau du ciblage cela me semble bon pourtant et l'image est bien dans le repertoire courant (paremetres de publication verifiés)
    tu vois d'ou cela pourrait venir?

  6. #6
    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
    re,

    alors je commence par la fin lol Que tes 3 images ne soient pas chargées, c'est normal : lorsque le clip est chargé, il écrase le clip dans lequel il va --> donc is tu load dans conteneur_mc, lorsque l'image va arriver ca va tout effacé et par conséquent tes image1_mc et suite sont aussi virée --> le loade des 3 images marche pas

    alors ensuite pour la gestion des profondeur, si tu ne crées pas de clip dynamiquement, tu n'as pas de problème sinon le truc c'est que les clips que tu crées dynamiquement mets les dans une profondeur < 100 et les autre tu les génères > 100 comme ca pas de problème Autre possibilité un peu plus lourde --> tu utilise une boucle for ... in qui resence toutes le profondeur grace à getDepth et qui te retourne une profondeur vide

    voila pour le ciblage, consulte la FAQ, il y a de bon tutos

    @++

  7. #7
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    re
    Citation Envoyé par thecaptain
    Que tes 3 images ne soient pas chargées, c'est normal : lorsque le clip est chargé, il écrase le clip dans lequel il va --> donc is tu load dans conteneur_mc, lorsque l'image va arriver ca va tout effacé et par conséquent tes image1_mc et suite sont aussi virée --> le loade des 3 images marche pas
    heu non je comprends pas bien
    donc lorsque je load dans mon clip conteneur_mc, je n'aurais jamais acces aux clips loadés image1_mc, et image2_mc et image3_mc?
    lorsque - toujours dans la meme configuration - je fais sur ma 30eme image (je lui laisse le temps de charger le fichier miniature.swf, qui ne fais que 1ko donc comme ca je suis sur qu'il est chargé ) un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (var prop in conteneur_mc)
    {
        trace (prop+"="+conteneur_mc[prop]);
    }
    cela m'affiche bien
    load=[type Function]
    image3_mc=_level0.conteneur_mc.image3_mc
    image2_mc=_level0.conteneur_mc.image2_mc
    image1_mc=_level0.conteneur_mc.image1_mc
    donc en testant de la meme facon sur les clips image1_mc, 2 et 3, cela me sort bien:
    ****************************************
    load=[type Function]
    ****************************************
    load=[type Function]
    ****************************************
    load=[type Function]
    donc jusque la mon ciblage est bon si j'ai bien compris

    ce que je ne comprends pas c'est lorsque je loade dans mon conteneur_mc, cela m'efface les clips image1_mc, etc? le but c'est ca non?
    alors que l'on force ou pas le unloadMovie, cela fait la meme chose?
    mais j'ai l'impression que l'on ne parles pas tout a fait de la meme chose :s
    j'ai mis a jour mes sources sur mon site, est ce que cela t'embetterais d'y jetter un oeil, juste pour voir si l'on parles bien de la meme chose?
    http://www.phplibrairies.com/flash/
    Citation Envoyé par thecaptain
    alors ensuite pour la gestion des profondeur, si tu ne crées pas de clip dynamiquement, tu n'as pas de problème sinon le truc c'est que les clips que tu crées dynamiquement mets les dans une profondeur < 100 et les autre tu les génères > 100 comme ca pas de problème Autre possibilité un peu plus lourde --> tu utilise une boucle for ... in qui resence toutes le profondeur grace à getDepth et qui te retourne une profondeur vide
    voila pour le ciblage, consulte la FAQ, il y a de bon tutos
    oui je les ai regardé, cela me semble acquis, je crois

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

    apparemment, oui tu as bien compris le ciblage mais pour loader tes mc tu a fait un clip vide manuellement ? Si c'est le cas il est bien possible que flash ne l'écrase pas ce qui expliquerai que cela marche toujours... Quoi qu'il en sois, lorsque tu loade des swf, je te conseille vivement de les loader dans des clips vide, ca t'évitera surement des mauvaises surprise par après

    @++

  9. #9
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par thecaptain
    apparemment, oui tu as bien compris le ciblage
    cool, j'avance

    Citation Envoyé par thecaptain
    ais pour loader tes mc tu a fait un clip vide manuellement ? Si c'est le cas il est bien possible que flash ne l'écrase pas ce qui expliquerai que cela marche toujours... Quoi qu'il en sois, lorsque tu loade des swf, je te conseille vivement de les loader dans des clips vide, ca t'évitera surement des mauvaises surprise par après
    Bah en fait si je les ai fait manuellement, c'est que dans mon animation je voudrais - plus tard - quand deja j'arriverais a afficher mes 3 images - pourvoir modifier dynamiquement en jouant sur les loadMovie et les unLoadMovie les images affichées, de telle sorte que cela simule un "deroulement" et m'evite de charger des images relativement grosses

    Maintenant si tu penses que ma technique est plutot bancale, je suis prenneur d'autres solutions

  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
    Maintenant si tu penses que ma technique est plutot bancale, je suis prenneur d'autres solutions
    alors fait plutot un truc du genre:
    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
    //un tit prototype de preloade
    MovieClip.prototype.load = function(url)
    {
      this.loadMovie(url);
      this.onEnterFrame = function()
      {
        if (this.getBytesLoaded() == this.getBytesTotal())
        {
          //on supprime ce onEnterFrame
          delete this.onEnterFrame;
          //bien sur tu peux personnaliser le code pour qu'il corresponde ;)
        }
      }
    }
     
    //préparation pour le chargement d'images
    var urlimage = ["truc1.jpg", "truc2.jpg", "truc3.jpg", "truc4.jpg"];
    var tabClip = [];
    for (var i=0 ; i<4 ; i++)
    {
      tabClip[i] = this.createEmptyMovieClip("image_mc"+i, i);
      tabClip[i].load(urlimage[i]);
    }
    et il te reste plus qu'a positionner les clips --> les attributs _x et _y sont les seuls que flash garde en mémoire lorsqu'il écrase les clips sauf erreur Bien entendu, après tu peux reloader des autres images dans ces meme clips

    @++

  11. #11
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    t'es un amour captain LOL
    non franchement super j'ai plus qu'a gerer la profondeur et ca sera nickel merci bien pour tout

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/01/2008, 23h36
  2. [Flash MX 2004] actionscript et musique
    Par WriteLN dans le forum Flash
    Réponses: 5
    Dernier message: 20/01/2004, 16h36
  3. [Flash Mx 2004] - Supprimer un symbole
    Par alucard dans le forum Flash
    Réponses: 4
    Dernier message: 05/01/2004, 16h03
  4. [Flash mx 2004 ] DataGrid
    Par bolo dans le forum Flash
    Réponses: 4
    Dernier message: 18/12/2003, 19h15
  5. [Flash MX 2004] pb fonction composant
    Par dens63 dans le forum Flash
    Réponses: 12
    Dernier message: 13/12/2003, 08h09

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