Positionner dynamiquement un clip en fonction d un clip precedant....

Résolu
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006 - 20 nov. 2006 à 21:37
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 - 24 nov. 2006 à 13:17
salut
alors voila le probleme :
j essaye de faire un genre de gallerie dynamique qui charge les images a partir d un fichier xml et pour cela j ai besoin que chaque image se place dans un movie clip qd elle est chargée . jusque la tt va bien mais le probleme c est que j aimerai qu elle se colle a la precedente!
donc le soucis est :
comment donner la position img._x ?

ma logique voudrait que img._x = "img._x  de l image precedente" +"la largeur de l'image precedente"
suis je sur la bonne voie?

voici une partie de mon code:

for (var i = 0; i<noeuds.length; i++) {
  //nom de l'image
  var nom = noeuds[i].attributes.name;
// largeur de l image
  var img.width = noeuds[i].attributes.width;
  //On crée un clip vide et le positionne
  var img = this.createEmptyMovieClip("img"+i, i++);
  img._x = noeuds[i-1].attributes.width;  c est la que ca bloque

14 réponses

cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
24 nov. 2006 à 08:27
Bonjour,

tu t'emèles un peu les pinceaux dans ton script. Tu n'as pas bien compris ou lu la fonction que je t'ai proposée hier.

Refaisons un essai...

var imglist = new XML ();
imglist.ignoreWhite = true;
imglist.onLoad = function ()
{
    donnees ();
};
imglist.load ("getImgList.php");
//chargement du document PHP/Xml

//recuperation des données

function donnees ()
{
    //liste des images
    var noeuds = imglist.firstChild.childNodes;
    // position de base du premier clip
    var positionX = 0;
    var largeur = 0;
    var nom="";
    var diapo:MovieClip=this.createEmptyMovieClip ("diaporama", this.getNextHighestDepth());
    for (var i = 0; i < noeuds.length; i ++)
    {
        nom = noeuds [i].attributes.name;
        // largeur de l image
        if (i > 0)
        {
            largeur = noeuds [i - 1].attributes.width;
        }
        //On crée un clip vide et on le positionne
        var mc = diapo.createEmptyMovieClip ("photos" + i, i);
        positionX += largeur;
        mc.loadMovie ("images/" + nom);
        mc._x =positionX;
    }
}
stop();

@+
3
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
20 nov. 2006 à 21:39
je precise que bien evidemment la largeur des images n est pas toujours la meme d ou la difficultée (pour moi en tout cas ):)))
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
21 nov. 2006 à 08:20
Bonjour,
essaye comme ceci :

var positionX=0; // position de base du premier clip
var largeur =0;
for (var i = 0; i<noeuds.length; i++) {
  //nom de l'image
  var nom = noeuds[i].attributes.name;
// largeur de l image
if (i>0){
 largeur = noeuds[i-1].attributes.width;
}
  //On crée un clip vide et le positionne
  var img = this.createEmptyMovieClip("img"+i, 100+i);
  img._x =positionX + largeur; 
  positionX+=noeuds[i].attributes.width
}

@+
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
21 nov. 2006 à 10:45
salut ,
je viens de tester ta solution mais pour l instant ca ne fonctionne pas malheureusement .
je ne vois que la derniere image qui est positionnée en x=0
j y retourne!

si quelqu un a des precisions  ou  d autres solutions elles sont toujours les bienvenues :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
21 nov. 2006 à 10:46
salut ,
je viens de tester ta solution mais pour l instant ca ne fonctionne pas malheureusement .
je ne vois que la derniere image qui est positionnée en x=0
j y retourne!

si quelqu un a des precisions  ou  d autres solutions elles sont toujours les bienvenues :)
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
21 nov. 2006 à 15:00
Salut,

1° es-tu sur que le xml est chargé completement lorsque tu lances ta fonction de positionnement des clips ??
2° si tu fait un trace(noeuds[i].attributes.width) dans ta boucle de positionnement des clips, est-ce que cela te sort les bonnes valeurs ??

@+
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
21 nov. 2006 à 21:43
j ai essayé avec la fonction trace mais rien ne s affiche....
alors voila je met la source complete et si quelque trouve la solution se serait super cool :)
tout ce que je veux c est reussir a creer un slideshow avec les photos qui se chargent de maniere dynamique et se placent l une a coté de l autre sur un axe horizontal sans avoir de restriction au niveau des largeurs de fichiers ...

c est loin d etre fini mais pour avancer il faudrait deja que j arrive a resoudre ce probleme de placement....

HEEEEEEEEEELP!


<hr />
fichier getImgList.php :

<?php //Les répertoires
$rep_imgs = "./images";
$rep_mini = "./mini";

//Les dimensions max des miniatures
$width_mini = 300;
$height_mini = 400;

//La variable renvoyer à flash
$retour="<racine>";

//On ouvre le dossier
$rep=opendir($rep_imgs);

/*Expression régulière pour identifier les fichiers jpg ou jpeg quelque soit leur casse */
$regex="#[-_a-z0-9]+.jp[e]?g#i";

//On parcours tous les fichiers
while ($file = readdir($rep)){

 //Si c'est un jpg
 if(preg_match($regex, $file)){

  //On copie l'image
       $src_img = imagecreatefromjpeg("$rep_imgs/$file");

  //Si la miniature n'existe pas
  if(!file_exists("$rep_mini/$file")){

   //On cherhe la plus grande dimension
   if(imagesx($src_img) > imagesy($src_img)){
    //On calcul la proportion
    $proportion = $width_mini/imagesx($src_img);

    //Nouvelles dimensions
    $new_w = $width_mini;
    $new_h = imagesy($src_img)*$proportion;
   }else{
    //On calcul la proportion
    $proportion = $height_mini/imagesy($src_img);

    //Nouvelles dimensions
    $new_h = $height_mini;
    $new_w = imagesx($src_img)*$proportion;
   }

   //On crée la nouvelle image
   $dst_img = imagecreatetruecolor($new_w,$new_h);
   imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));

   //On l'enregistre
   imagejpeg($dst_img,"$rep_mini/$file");
  }

  //On rajoute un noeud xml avec le nom de l'image et ses dimensions
  $retour .= "";
 }
}

//On ferme le premier noeud
$retour .= "</racine>";

//On ferme le dossier
closedir($rep);

//On renvoie le xml au format utf8
echo utf8_encode($retour);

?>

<hr />fichier galerie.swf:

var imglist = new XML(); //création de l'objet XML
imglist.ignoreWhite=true;// les espaces vides sont supprimés
imglist.load("getImgList.php");//chargement du document PHP
      stop();
imglist.onLoad = function() {
 createGalerie();
      play(); }; //quand le chargement du document est terminé , lancement de l'animation

 

//Création de la galerie
function createGalerie() {
 //liste des images
 var noeuds = imglist.firstChild.childNodes; 
 
 
 // position de base du premier clip
 
 
for (var i = 0; i<noeuds.length; i++) {
 var positionX=0;  
    var largeur=0;
  var nom = noeuds[i].attributes.name;
     // largeur de l image
      if (i>0){
      largeur = noeuds[i-1].attributes.width;
   
      }
      else { largeur=0 ;}
  //On crée un clip vide et le positionne
  var mc = this.createEmptyMovieClip("img"+i, i);
  positionX+=noeuds[i-1].attributes.width;
  //mc._x =(positionX + largeur); 
  

var view = mc.createEmptyMovieClip("view", 0);
  view.loadMovie("images/"+nom);
  view._x = positionX + largeur
}
}
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
22 nov. 2006 à 21:56
alors oui a pres des recherches , la version actuel de mon fichier me renvois les bonnes valeurs de largeur avec la fonction trace .
que dois je faire chef? :)
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
22 nov. 2006 à 22:05
autre possibilité je pense ce coup ci etre sur la bonne piste , ne devrais je  pas cibler mes clip a l aide de la comande "this" ? en effet en les placant un peu au hasard je viend d obtenir un effet etrange qui redimensionne ma page web en fonction de la taille de l explorateur .... (je sais pas ci c est clair )
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
23 nov. 2006 à 13:28
Bon,

on va procéder par étape...(dans createGalerie, vu que c'est là que ca coice)
1° sortire de la boucle
var positionX=0;  
    var largeur=0;
sinon les valeur se réinitialisent à chaque itération
2° pour le moment on laisse tomber img et view, je vois pas (encore) pourquoi tu fait un clip dans un clip pour chaque miniature

essaye avec la fonction codée comme ceci

function createGalerie ()
{
 //liste des images
 var noeuds = imglist.firstChild.childNodes;
 // position de base du premier clip
 var positionX = 0;
 var largeur = 0;
 for (var i = 0; i < noeuds.length; i ++)
 {
  var nom = noeuds [i].attributes.name;
  // largeur de l image
  if (i > 0)
  {
   largeur = noeuds [i - 1].attributes.width;
  }
  //On crée un clip vide et on le positionne
  var mc = this.createEmptyMovieClip ("img" + i, 1000+i);
  positionX += largeur
  mc._x =(positionX + largeur);
  mc.loadMovie ("images/" + nom);
 }
}

et dit moi ce qui ce passe...

@+
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
24 nov. 2006 à 03:16
salut :)
alors depuis j ai un peu evolué dans ma compréention de l AS et j ai essayé de refaire ca au propre mais toujours ce probleme de placement .grace a la fonction Trace ke j ai mise un peu partout j arrive a suivre l evolution du Script.

var imglist = new XML();
imglist.ignoreWhite=true;
imglist.onLoad = function() { donnees();
};
imglist.load("getImgList.php");//chargement du document PHP/Xml
stop;





//recuperation des données
function donnees() {
 //liste des images
 var noeuds = imglist.firstChild.childNodes; 
 this.createEmptyMovieClip("diaporama",0);
 for (var i = 0; i<noeuds.length; i++) {
 trace("taille de l image"+noeuds[i].attributes.width)
 var positionX:Number=0; // position de base du premier clip
 var largeur:Number=0;
 
 
 // largeur de l image
    if (i>0){
  var largeur:Number = noeuds[i-1].attributes.width;
  
  }
  else{ var largeur:Number=0;
  };
  var largeur= Number(noeuds[i].attributes.width)+Number(largeur);
  
  trace("largeurtotal="+largeur);
    var photos= diaporama.createEmptyMovieClip("photos"+i,i)   
    positionX += largeur
          photos._x =(positionX + largeur);



    photos._x=largeur
     // var view = photos.createEmptyMovieClip("view", 0);
   var nom = noeuds[i].attributes.name;
   photos.loadMovie("images/"+nom);
   
     trace("position de la photo  "+i+" = "+photos._x);    
   
    };
  
    }

au final je sais que le fichier Xml est chargé ca y a pas de soucis , par contre avec le script tel k il est les sommes s additionnent entre 2 images mais pas plus.
voila un apercu de ce que le debogeur me donne avec la fonction trace:


taille de l image282
largeurtotal=282
position de la photo  0 = 282
taille de l image400
largeurtotal=682
position de la photo  1 = 682
taille de l image300
largeurtotal=700
position de la photo  2 = 700
taille de l image300
largeurtotal=600
position de la photo  3 = 600
taille de l image314
largeurtotal=614
position de la photo  4 = 614

qd je test l animation les images ne sont evidemment pas placées corectement et se chevauchent . par contre j ai l impression que certaine ne sont pas chargées entierement   car elle me semblent coupées .

voili voilou
 
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
24 nov. 2006 à 11:39
alors voila ce que j obtient en faisant un trace de mc._X :

positionX  0 =0
positionX  1 =282
positionX  2 =282400
positionX  3 =67651935.2
positionX  4 =6200588
positionX  5 =-27114265.2
positionX  6 =-55970918.4
positionX  7 =0
positionX  8 =0
positionX  9 =0
positionX  10 =0
positionX  11 =0
positionX  12 =0
positionX  13 =0
positionX  14 =0

mais par contre les images on l air de se charger normalement , du moin pour celle que je peut apercevoir...
ne crois tu pas qu il faut definir certaine var avec la fonction Number notamment largeur = noeuds [i - 1].attributes.width; ?
0
groovybronx Messages postés 12 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 24 novembre 2006
24 nov. 2006 à 12:06
j ai fais quelques modif notamment au niveau des variables qui etaient consideré comme des string et non des Number
ce qui fais que avant  a+b=ab au lieu de a+b=c maintenant .
 //liste des images
    var noeuds = imglist.firstChild.childNodes;
    // position de base du premier clip
    var positionX:Number = 0;
    var largeur:Number = 0;
    var nom="";
    var diapo:MovieClip=this.createEmptyMovieClip ("diaporama", this.getNextHighestDepth());
    for (var i = 0; i < noeuds.length; i ++)
    {
        nom = noeuds [i].attributes.name;
        // largeur de l image
        if (i > 0)
        {
            largeur = Number(noeuds [i - 1].attributes.width);
        }
        //On crée un clip vide et on le positionne
        var mc = diapo.createEmptyMovieClip ("photos" + i, i);
        positionX = Number(positionX)+Number(largeur);
  
        mc.loadMovie ("images/" + nom);
        mc._x =positionX;
  trace("mc._x= "+i+"   "+mc._x);
  
    }
}
 
stop();

un grand merci pour ta patience , maintenant je peux continuer mon Schmilblick
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
24 nov. 2006 à 13:17
ET BIEN VOILA !!!

@+
0
Rejoignez-nous