Forums Développement Multimédia

Aller au contenu

Galerie XML et probleme de bouton dynamique

CODE Actionscript

6 réponses à ce sujet

#1 tetsuya_art

    Ceinture Orange

  • Members
  • PipPipPip
  • 44 messages

Posté 01 July 2008 - 20:12 PM

bonsoir,

étant encore débutant en actionscript, j'aurais aimer faire une galerie dynamique avec miniature et lorsqu'on clique sur la miniature on affiche l'image dans une autre fenêtre grâce a un getURL (pour le moment en tout cas, j'améliorerai ça en même temps que mon niveau en actionscript smile.gif).
je me suis basé sur le tuto de chargement d'images par xml présent sur le site. l'affichage des miniatures fonctionne mais lorsque je clique sur une miniature(quel qu'elle soit) seul la dernière image chargée s'affiche en grand.

Action Script


var galerie = gallerieXml.firstChild.childNodes;

var taille = 2;
var hauteur = 200;
var largeur = 100;
var espace = 5;

var long = galerie.length;
this.createEmptyMovieClip("bouton_mc",0);
for (var i = 0; i<long; i++) {

var small = galerie[i].attributes.thumb;
var big = galerie[i].attributes.big;

bouton_mc.createEmptyMovieClip("image_mc"+i, i);
bouton_mc["image_mc"+i].loadMovie(small);
trace(small);
trace(big);

bouton_mc.onRelease = function() {
trace(big);
};

bouton_mc["image_mc"+i]._xscale = bouton_mc["image_mc"+i]._yscale /= taille;

}

var colonne = 0;
var ligne = 0;
for (i=0; i<long; i++) {

if (colonne == long) {
colonne = 0;
ligne++;
}
var long_tot = bouton_mc["image_mc"+i]._x=colonne*(largeur+espace)/taille;
bouton_mc["image_mc"+i]._y = ligne*(hauteur+largeur)/taille;
colonne++;
}

stop();

j'ai tester le code grâce a un trace les 2 premiers trace m'affiche bien les liens des images (miniature et grande) mais le trace que j'ai mis dans un bouton ne m'affiche que le lien de la dernière miniature chargée...
je n'arrive pas a trouver une solution a ce problème, c'est sans doute tout bête icon_confused.gif

merci d'avance pour votre aide.

#2 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 01 July 2008 - 22:06 PM

Salut.

Tu as besoin d'un indice.


#3 tetsuya_art

    Ceinture Orange

  • Members
  • PipPipPip
  • 44 messages

Posté 01 July 2008 - 23:46 PM

merci pour ta réponse smile.gif
malheureusement ça ne fonctionne pas sad.gif

lorsque je mets ceci, ça m'affiche undefined

Action Script

	bouton_mc["image_mc"+i].indice = i;
bouton_mc.onRelease = function() {
trace(this.indice);
};

et lorsque je mets ça le bouton n'est plus cliquable...

Action Script

	bouton_mc["image_mc"+i].indice = i;
bouton_mc["image_mc"+i].onRelease = function() {
trace(this.indice);
};
ou

Action Script

	this["image_mc"+i].indice = i;
this["image_mc"+i].onRelease = function() {
trace(this.indice);
};

je sais pas trop comment faire icon_rolleyes.gif

#4 Cpt_Cavern

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 250 messages

Posté 02 July 2008 - 08:52 AM

Alors voila un début de réponse.


Action Script

# var galerie = gallerieXml.firstChild.childNodes; 
#
# var taille = 2;
# var hauteur = 200;
# var largeur = 100;
# var espace = 5;
# var small:Array = new Array();
# var big:Array = new Array();
#
# var long = galerie.length;
# this.createEmptyMovieClip("bouton_mc",0);
# for (var i = 0; i<long; i++) {
#
# small[i] = galerie[i].attributes.thumb;
# big[i]= galerie[i].attributes.big;
#
# bouton_mc.createEmptyMovieClip("image_mc"+i, i);
# bouton_mc["image_mc"+i].loadMovie(small);
# trace(small[i]);
# trace(big[i]);
#
# bouton_mc.onRelease = function() {
# trace(big[i]);
# };
#
# bouton_mc["image_mc"+i]._xscale = bouton_mc["image_mc"+i]._yscale /= taille;
#
# }
#
# var colonne = 0;
# var ligne = 0;
# for (i=0; i<long; i++) {
#
# if (colonne == long) {
# colonne = 0;
# ligne++;
# }
# var long_tot = bouton_mc["image_mc"+i]._x=colonne*(largeur+espace)/taille;
# bouton_mc["image_mc"+i]._y = ligne*(hauteur+largeur)/taille;
# colonne++;
# }
#
# stop();

En effet dans ton code la valeur de la variable big était à chaque fois re écrasé avec la dernière valeur de galerie[i].attributes.big; Donc en déclarant small et big comme des tableau tu peux y entrer toutes les url nécessaire et cibler celle qui t'intéresse via un index.

icon_wink.gif

Modifié par Cpt Cavern, 02 July 2008 - 08:54 AM.


#5 tetsuya_art

    Ceinture Orange

  • Members
  • PipPipPip
  • 44 messages

Posté 02 July 2008 - 15:24 PM

merci pour la réponse et les explications icon_biggrin.gif comme précedement tout marche bien sauf le trace du bouton qui affiche un "undefined" :s
bon ceci dit les tableau mon avancé d'un pas lol lorsque je remplace le big[ i ] par big[2] (par exemple) j'ai bien le lien de ma 3eme image qui s'affiche donc j'en conclu que le "i" est mal interpreter icon_rolleyes.gif mais toujours pas de solution

#6 j.mertens

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 133 messages

Posté 02 July 2008 - 15:56 PM

Hello,

en fait, fonctionner avec une variable indice est la bonne solution.
Le problème vient du loadMovie() qui écrase toutes les propriétés du clip crée dynamiquement.

Je te propose de passer pas une étape intermédiaire :
créer un clip dynamique (btn_mc+i) et dans celui-ci créer un clip ou va être charger l'image et de mettre sur le 1er clip l'action onRelease et normalement l'indice devrait être le bon.

Action Script

var galerie = gallerieXml.firstChild.childNodes; 

var taille = 2;
var hauteur = 200;
var largeur = 100;
var espace = 5;

var small:Array = new Array();
var big:Array = new Array();

var long = galerie.length;
var container:MovieClip=this.createEmptyMovieClip("bouton_mc",0);
for (var i = 0; i<long; i++) {

small[i] = galerie[i].attributes.thumb;
big[i]= galerie[i].attributes.big;

var _btn:MovieClip=container.createEmptyMovieClip("btn_mc"+i, i);
var _btn_img:MovieClip= _btn.createEmptyMovieClip("image_mc", 1);
_btn.indice=i
_btn_img.loadMovie(small[i]);
trace(small[i]);
trace(big[i]);

_btn.onRelease = function() {
trace(big[this.indice]);
};

_btn._xscale = _btn._yscale /= taille;

}

var colonne = 0;
var ligne = 0;
for (i=0; i<long; i++) {

if (colonne == long) {
colonne = 0;
ligne++;
}
var long_tot = bouton_mc["btn+i]._x=colonne*(largeur+espace)/taille;
bouton_mc["btn"+i]._y = ligne*(hauteur+largeur)/taille;
colonne++;
}

stop();

Citation
lorsque je remplace le big[ i ] par big[2] (par exemple) j'ai bien le lien de ma 3eme image qui s'affiche donc j'en conclu que le "i" est mal interpreter


Non, le premier élément d'un tableau est stocké à l'indice 0, big[2] représente donc effectivement le lien de la 3eme image (si tu commences à compter à partir de l'image 1 icon_mrgreen.gif )

@+
Johan

#7 tetsuya_art

    Ceinture Orange

  • Members
  • PipPipPip
  • 44 messages

Posté 02 July 2008 - 17:00 PM

ah cool merci ça marche maintenant!! merci beaucoup a tous icon_biggrin.gif



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)