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 MX2004] Evenement sur une image...


Sujet :

Flash

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut [FLASH MX2004] Evenement sur une image...
    Salut,

    effet voulu :
    J'ai un fichier xml qui contient des info : chaque ligne du fichier donne les coordonées, largeur, hauteur, et l'url d'une image
    l'image doit ensuite se placer sur une grille aux coordonées etc contenu dans le fichier xml.
    les images doivent ensuite pouvoir etre déplaçable.

    pom m'a aidé (ici) et donc actuellement j'ai des movie clip qui se place aux bonnes coordonées, bonne largeur etc...

    le problème :
    jusque là, je ne chargais pas l'image, et les movie clips sont drag&drop. J'ajoute alors dans la boucle for de création des movi clip (peu importe ce qu'il y a d'autre dedans...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loadMovie(Perso1.Inventaire_xml.childNodes[i].attributes['Url']+".JPEG",mc);
    je télécharge donc l'image correctement, puis elle se place au bonnes coordonées sur la grille
    MAIS
    maintenant plus moyen de drag&drop...ni de lui attribuer des valeurs comme cela : mc.NumeroImage=5;

    de plus, la méthode du drag&drop m'a l'air un peu moyenne, car si on déplace-clic suffissamment rapidement, il est possible de déclencher l'évenement onpress sur un objet, puis de le relacher sans déclencher la méthode onrelease, ce qui me pose des problème pour ce que je veux faire...
    j'avais donc penser à remplacer le curseur par l'image lorsqu'on sélectionne une image pour la déplacer sur la grille, puis remettre le curseur normal lorsqu'on relache l'image.

    pour modifier le curseur je trouverais sur un exemple...
    le seul problème est que je n'arrive pas à déclencher un évenement lorsqu'on clique sur une des images chargées avec le loadMovie...

    Voilà, j'espère que c'est clair, sinon dites ce sue je doit préciser...
    Merci

  2. #2
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Hellop !!

    Ton problème est tout simple, mais ça va demander quelque chose de nouveau pour toi, je pense.

    Il faut savoir que lorsque tu utilise la méthode loadMovie, les étapes suivantes sont associées :

    1. initialisation du clip pour le chargement
    2. chargement du clip durant un laps de temps plus ou moins long
    3. ré-initialisation du clip pour l'affichage de l'image.


    Donc si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mc.loadMovie(...);
    mc.onPress = function() {...}
    Tu risque fortement de te retrouver avec un clip ré-initialisé, donc toutes les fonctions et propriétés que tu y avait associées juste après l'appel à "loadMovie" sont remise à "undefined".

    Pour palier à ce problème, tu dois tester le chargement de ton image pour savoir déterminer lorsque le chargement est terminé et l'initialisation passée.

    Tu pourrais faire 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
    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
     
    // création des mc, placement, etc...
    for( var i = 0; i < maxLength, i++ )
    {
    // création du clip d'accueil de l'image
    var mc = this.createEmptyMovieClip( 'mc', 1000 + i );
     
    // pour chaque mc, je crée un controleur
    // (faut espérer que t'as pas 500 images à charger, sinon faut 
    // gérer ça différement... pour des petits nombres, c'est faisable
    // mais sinon...)
    var ctrl = this.createEmptyMovieClip( 'ctrl', 2000 + i );
     
    // je stocke le mc et un index pour les réutiliser dans la boucle
    ctrl.mc = mc;
    ctrl.index = 0;
     
    // j'initialise les propriétés de base
    mc._x = ...;
    mc._y = ...;
     
     
    // je lance une boucle qui va s'exécuter à chaque entrée de frame
    ctrl.onEnterFrame = function()
    {
    switch( this.index )
      {
    // j'attend 5 entrées de frames pour la première initialisation
    // ensuite, tant que le fichier n'est pas chargé, je reste sur le
    // cas numéro 5
      case 5 :
        if( this.mc.getBytesLoaded() < this.mc.getBytesTotal() )
        {
        trace( 'loading' );
        }
        else
        {
        trace( 'loaded' );
        this.index++;
        }
        break;
    // j'attend encore 5 entrées de frame la seconde initialisation
      case 10 :
        {
        this.mc.onRollOver = function() { ... }
        this.mc.onPress = ...
        ...
        // suppression de la boucle onEnterFrame et du clip controlleur
        delete this.onEnterFrame;
        this.removeMovieClip();
        }
      default :
        this.index ++;
        break;
      }
    }

    Voilà. Si tu comprends le concept, tu devrai t'en sortir.

    Bon courage, a++

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup titouille !
    (désolé, mais je n'ai pas eu le temps de m'occuper de ça ces derniers jours...)
    en effet la démarche m'a parru étrange à la premiere lecture, mais bonne technique :-)
    encore merci pour les détails et les explications
    ++

  4. #4
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Bonsoir, je fais un petit UP sur ce post car c'est le seul que j'ai trouvé sur mon problème...

    Je charge (au max) 16 images et j'aimerais les rendre clickable (ca existe ce mot ?)

    J'utilise la méthode loadMovie sur 16 clips et je voulais déclarer onRelease (ou onPress ou autre évènement) quand l'utilisateur click sur l'une de ces 16 images. Le prob est que les images apparaissent bien mais aucun évènement... J'imagine que la déclaration de ces évènements est faite trop tôt et donc réinitialisées à undefined
    Tu risque fortement de te retrouver avec un clip ré-initialisé, donc toutes les fonctions et propriétés que tu y avait associées juste après l'appel à "loadMovie" sont remise à "undefined".
    Ma question est simple, est-ce qu'il existe une autre méthode que celle proposée pour attendre la création d'un loadMovie et ainsi lui définir des callbacks évènements souris ???

    Merci d'avance

    ++
    JC

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    J'avais un problème similaire, j'obtenais des résultats correctes à mes tests unitaires
    et souvent plus rien ne marchait après assemblage des éléments. C'était un argument suffisant
    pour ne plus utiliser Flash professionnellement, seulement je me suis entêté et j'ai écris une
    collection de classes AS2 pour pouvoir assembler des animations Flash sans surprise.
    Maintenant je décris tout en xml. Chaque animation et movieclip est déclaré via un tag, le bazar charge
    toutes les animations quant on a besoin d'elles, instancie les movieclips et gère la communication inter-animations.
    Pour exemple un paneau de controle s'ajoute ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <lib:panel>
      <bt_base_lft code='ok' ox='16' oy='44' cx='120' cy='120'><name><![CDATA[Ok]]></name></bt_base_lft>
      <bt_base_lft code='pwd' ox='50' oy='100' cx='150' cy='150'><name><![CDATA[Surprends moi!]]></name></bt_base_lft>
      <bt_base_lft code='no' ox='50' oy='200' cx='100' cy='100'><name><![CDATA[Non]]></name></bt_base_lft>
    </lib:panel>
    J'arrive comme cela à réaliser des applications en Flash pur avec des centaines d'animations en interaction
    sans prendre aucun cachet d'aspirine.

    Goofyt,

  6. #6
    Membre du Club Avatar de Tigrounette
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    Moi pour régler ce problème je fait comme ça :

    Un Clip1 qui contient un Clip2
    Je charge mes images dans Clip2 (je duplique le Clip1 si j'ai plusieurs images)
    Et toute mes intéraction se font à partir de Clip1, comme ça j'ai plus de problème.

  7. #7
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Je vais poser une question bête...

    En quoi le fait de mettre deux clips encapsulés (c bien ca?) permet-il d'être sur du chargement de l'image avant de déclarer une méthode sur le-dit clip comme onRelease...

    ++
    JC

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Dans une approche objet:

    Tu dérives une classe de MovieClip que t'appelles Image par exemple, dessus tu crées toutes les méthodes et propriétés que tu veux. Pour charger l'image tu crée un mc vide avec createEmptyMovieClip et c'est sur ce clip que tu charges l'image
    Il existe un bel exemple de moock si mes souvenir sont bons.

    Si tu veux du code là dessus je peux


    Goofyt

  9. #9
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    donc, l'utilité du double clip, c'est de mettre les évènement sur le premier et d'attacher à ce meme premier l'image que l'on veut, ainsi, les méthodes sont prises en compte meme si l'image n'a pas fini d'être chargée, c ca ???

    Sinon, je veux voir du code stp

    ++
    JC

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    voici une fonction extraite d'une classe Image que j'utilise abondamment.
    J'y est laissé deux appels de fonction qui méritent quelques remarques:

    - la méthode Image.update() appelée à réception du fichier image permet
    d'appliquer un mode d'affichage précis à l'image afin de la présenter
    dans une zone avec ou sans masque et/ou déformations, redimensionnements
    etc...

    C'est cette zone qui permet de dimensionner un deuxième clip qui
    lui supporte les évènements onPress etc.. Si un masque est demandé un
    nouveau clip sera instancié par cette fonction pour supporter le setMask().
    Itou pour le mode grattage.


    - les appels à une méthode onEvent(...) sont restés en place, manière
    d'illustrer comment la visualisation de la progression est remontée
    vers un gestionnaire, en générale c'est une animation de plus haut
    niveau qui instancie et gère la barre de progression.

    Ces deux points étant un peu hors sujet, je les ai virés pour une meilleur
    lisibilité, mais je reste à ta disposition pour plus d'infos.






    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
     
      /*-------------------------------------------------------------------------
        node et mc_interface sont des propriétés de la classe Image dont la 
        fonction load() présentée ici est méthode.
      -------------------------------------------------------------------------*/
     
      public function load():Void
      {
        url = node.attributes.url;  // on récupère l'url de l'image à charger
     
        //-------------------------- préloader ------------------------
        mc_img = this.createEmptyMovieClip("mc_img", 0);
     
        mc_loader = new MovieClipLoader();
        lstrn = new Object();
     
        // pour avoir accès à 'this' depuis les fonctions du listener
        var mc_image:Image = this;
     
     
        lstrn.onLoadInit = function (mc_target) 
        {
     
          /*------------------------------------------
            sauve la taille originale de l'image dans
            les propriétés: xsize et ysize.
            une référence directe est conservée dans 
            la propriété:   mc_target.
          -------------------------------------------*/
          mc_image.xsize = mc_target._width;
          mc_image.ysize = mc_target._height;
          mc_image.mc_target = mc_target;
     
          // MàJ du mode d'affichage
          mc_image.update();
          mc_image.mc_interface.onEvent(mc_image, "onImgLoadd", mc_image.node);
        };
     
     
     
        lstrn.onLoadProgress = function (mc_target, loadedBytes, totalBytes) 
        {
          mc_image.node.attributes.loadedBytes = loadedBytes;
          mc_image.node.attributes.totalBytes = totalBytes;
          mc_image.mc_interface.onEvent(mc_image, "onProgress", mc_image.node);
        }; 
     
     
        lstrn.onLoadStart = function (mc_target) 
        {
          mc_image.mc_interface.onEvent(mc_image, "onStart", mc_image.node);
        };
     
     
     
        lstrn.onLoadError = function (mc_target, errno)
        {
          mc_image.mc_interface.onError(mc_image, "onLoad", mc_image.node);
        };
     
     
     
        // Ajout du listener et chargement
        mc_loader.addListener(lstrn);
        mc_loader.loadClip(url, mc_img);
      }


    Bonne journée,
    Goofyt

Discussions similaires

  1. Superposer Anim Flash sur une image JPG
    Par parilla77 dans le forum Intégration
    Réponses: 2
    Dernier message: 19/06/2007, 12h09
  2. [FLASH 8 PRO] intervention sur une image clé
    Par CUCARACHA dans le forum Flash
    Réponses: 3
    Dernier message: 08/02/2007, 09h30
  3. [FLASH 8] Préchargement d'une image en ligne sur CD
    Par blirette dans le forum Flash
    Réponses: 5
    Dernier message: 27/09/2006, 20h46
  4. [FLASH MX2004] Apparition d'une image
    Par Taz_8626 dans le forum Flash
    Réponses: 5
    Dernier message: 14/06/2006, 11h13
  5. Réponses: 2
    Dernier message: 02/09/2005, 20h47

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