Comment redimensionner plusieurs images ?

Cgaybeul Messages postés 105 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 11 décembre 2006 - 18 janv. 2006 à 09:18
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010 - 18 janv. 2006 à 15:55
Salut !

J'ai trouvé comment redimensionner une image, en vérifiant qu'elle est chargée, par contre j'en ai une série qui se chargent "en même temps",et je n'arrive pas à les redimensionner, le script ne prend en compte que la dernière ...


Voilà le script :

Je récup mes données dasn un XML et je lance la fonction d'affichage pour chaque occurence :

function ParseXML() {
nbrVignettes = newXML.firstChild.childNodes.length;
for (i=0; i<nbrAffichage; i++) {
alea = random(nbrVignettes);
image = newXML.firstChild.childNodes[alea].childNodes[2].attributes.SRC;
_root.affichage(image);
}
}

function affichage() {
var myClip = _root.createEmptyMovieClip("Clip_"+i, i);
myClip.loadMovie(racine+image);
////// Verification du chargement des images ////////////
this.onEnterFrame = function() {
filesize = myClip.getBytesTotal();
loaded = myClip.getBytesLoaded();
if (loaded == filesize) {
trace(myClip._width+" - "+myClip._height+" - "+filesize);
}
};
}

Je ne comprens pas ce qui ne va pas ??? Le "this" ???
Résultat : mes images s'affichent mais je ne récupère que les dimensions de la dernière !!!

Si quelqu'un à une piste, elle sera la bienvenue.
Merci !

5 réponses

daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
18 janv. 2006 à 11:25
deja a premiere vu d'oeil, j'ai remarqué que dans ta fonction parseXML tu envoyais image en parametre de la fonction affichage().
_root.affichage(image);
mais lorsque l'on regarde ta fonction affichage tu n'a pas de variable en parametre d'entrée
et de plus tu fait un myClip.loadMovie(racine+image);
ton image il vient d'ou ?

function ParseXML() {
nbrVignettes = newXML.firstChild.childNodes.length;
for (i=0; i<nbrAffichage; i++) {
alea = random(nbrVignettes);
image = newXML.firstChild.childNodes[alea].childNodes[2].attributes.SRC;
_root.affichage( image );
}
}

function affichage(image:String) {
var myClip = _root.createEmptyMovieClip("Clip_"+i, i);
myClip.loadMovie(racine+image);
////// Verification du chargement des images ////////////
this.onEnterFrame = function() {
filesize = myClip.getBytesTotal();
loaded = myClip.getBytesLoaded();
if (loaded == filesize) {
trace(myClip._width+" - "+myClip._height+" - "+filesize);
}
};
}

Un petit conseil : essaye a l'avenir de déclarer tes variables

var maVar : Type = new Type();
C'est plus clair dans ton code pour savoir ce que c'est comme type de variable
Et puis la mode PHP des types de variables non-définie n'est pas le mieux pour l'éxécution des scritps
Il vaut mieux deux plusieurs variables de types différents qu'une seule qui sert à tous

Moi, tout ce que je veux, c'est aider mon prochain et que mon prochain m'aide
0
Cgaybeul Messages postés 105 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 11 décembre 2006
18 janv. 2006 à 12:15
Merci de tes conseils !!! Je ne suis pas développeur et me suis mis à l'AS il y a quelques mois seulement (grâce à ce site d'ailleurs !). Encore beaucoup à apprendre ;-)

Mon "image" c'est le nom des images que je charge dans le XML :
image = newXML.firstChild.childNodes[alea].childNodes[2].attributes.SRC;

Mais pas de soucis de ce côté, mes images s'affichent, par contre je n'arrive pas à récupèrer leur taille, seulement celle de la dernière affichée.
Mon soucis doit plutôt être dans la manière dont je lance mes fonctions ???

Par exemple, si je trace "image" ici :

this.onEnterFrame = function() {
trace(image);
filesize = myClip.getBytesTotal();
loaded = myClip.getBytesLoaded();
}

Je n'ai que le nom de la dernière image qui s'affiche en boucle ...
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
18 janv. 2006 à 14:16
Je viens de me rendre compte de ton erreur.
De part le fait que tu oublie d'envoyer en parametre ton image, tu oublie de la meme maniere d'envoyer ton index i qui correspond au numero de ton clip à creer
function ParseXML() {
nbrVignettes = newXML.firstChild.childNodes.length;
for (i=0; i<nbrAffichage; i++) {
alea = random(nbrVignettes);
image = newXML.firstChild.childNodes[alea].childNodes[2].attributes.SRC;
_root.affichage( image ,i);
}
}

function affichage(image:String,i:Numeric) {
var myClip = _root.createEmptyMovieClip("Clip_"+i, i);
myClip.loadMovie(racine+image);
////// Verification du chargement des images ////////////
this.onEnterFrame = function() {
filesize = myClip.getBytesTotal();
loaded = myClip.getBytesLoaded();
if (loaded == filesize) {
trace(myClip._width+" - "+myClip._height+" - "+filesize);
}
};
}
Vu que tu n'envoie pas ta valeur i dans ta fonction, celui a toujours la meme valeur ( "" )et ecrase donc a chaque fois la valeur de myClip.
Donc normal que tu est la derniere image car c'est la derniere que myClip est recu et qui n'est pas été écrasé.

Moi, tout ce que je veux, c'est aider mon prochain et que mon prochain m'aide
0
Cgaybeul Messages postés 105 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 11 décembre 2006
18 janv. 2006 à 14:38
Alors i:Numeric, ça génère une erreur (j'ai essayé i:Number pas d'erreur), par contre le problème reste le même.
De plus la valeur de i n'est pas écrasé puisque mes images s'affichent correctement :
var myClip = _root.createEmptyMovieClip("Clip_"+i, i);
myClip.loadMovie(racine+image);
Et si je met un trace(image); à cet endroit j'ai les bonnes images.

Je crois que le problème se situe lutot ici : this.onEnterFrame ...

Je fais un test tout bête, je trace myClip après le chargement et dans le EnterFrame :

myClip.loadMovie(racine+image);
trace(myClip);
////// Verification du chargement des images ////////////
this.onEnterFrame = function() {
trace(myClip);
}
};

et voilà le résultat :

_level0.Clip_0
_level0.Clip_1
_level0.Clip_2
_level0.Clip_3
_level0.Clip_4
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5
_level0.Clip_5 ...

Il charge les images et ensuite tourne en boucle dasn le this.onEnterFrame

J'ai testé ça aussi :
myClip.loadMovie(racine+image);
trace(myClip);
myClip.onEnterFrame = function() {
trace("test :"+myClip);
}

J'obtiens ça :
_level0.Clip_0
_level0.Clip_1
_level0.Clip_2
_level0.Clip_3
_level0.Clip_4
_level0.Clip_5
test :_level0.Clip_5
test :_level0.Clip_4
test :_level0.Clip_3
test :_level0.Clip_2
test :_level0.Clip_1
test :_level0.Clip_0

J'y comprends plus grand chose là !!!
0

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

Posez votre question
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
18 janv. 2006 à 15:55
alors oui pour le i c'est number (je m'etais trompé).
si tu as une boucle infini c'est normal aussi car le enterFrame est une boucle.
il execute ton code chaque fois que la tete de lecture change d'image
regarde sur ce poste je l'explique http://www.flashkod.com/forum.v2.aspx?ID=642402
utilise plutot le this.onLoad() qui ne charge qu'une fois et fait un trace de dimensions de ton element

Moi, tout ce que je veux, c'est aider mon prochain et que mon prochain m'aide
0
Rejoignez-nous