Random à améliorer

juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007 - 11 déc. 2006 à 23:27
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007 - 18 déc. 2006 à 12:49
bonjour,
j'ai un random d'images qui ne me satisfait pas. il n'est pas rare que la même image apparaissent 3 fois de suite. comment faire pour que toutes les images du dossier soient passées pour que la boucle reprenne par exemple. ou alors, du moins, empêcher que la même revienne 2 fois de suite. merci d'avance,
julienD

9 réponses

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

une solution est de garder en mémoire le nom de la dernière image apparue et après ton random vérifier si c'est le même nom de fichier qui ressort. Dans ce cas, recommencer le random.

@+
0
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007
13 déc. 2006 à 12:50
merci de ta réponse girou. je vais potasser cette solution quoique je ne sais pas trop vers quel code me tourner...
garder en mémoire.

julien

julienD
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
13 déc. 2006 à 13:16
Salut,

comment fais tu pour le moment (quel code utilises-tu) ?

@+
0
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007
15 déc. 2006 à 11:50
salut,
je n'ai de toute façon pas la solution. voilà le bout de code que j'utilise:

i = Math.floor(Math.random () * 25) ;
loadMovie ("monDossier/im_0"+i+".jpg",monClip);

si tu peux m'aider avec ça...
merci d'avance.

julienD
0

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

Posez votre question
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
15 déc. 2006 à 13:11
Bonjour,

voici une proposition de script :
Dans ce script, tu n'auras jamais de doublon (2 x la même image) avant 4 photos
Bref, si la photo 5 est chargée, elle ne pourra plus être chargées avant d'avoir appelé 4 fois la fonction chargerimage(conteneur)

memoire = [-1, -1, -1, -1];
function chargerimage(monClip) {
 var i:Number = memoire[3]; while (i memoire[0] or i memoire[1] or i == memoire[2] or i == memoire[3]) {
  i = Math.floor(Math.random()*25);
 }
 memoire.push(i);
 memoire.shift();
 //loadMovie("monDossier/im_0"+i+".jpg", monClip);
}
// A partir de ca, pour charger une image on appele la fonction en précisant en parametre le nom du clip ou doit être chargée l'image _root.conteneur dans l'exemple
chargerimage(_root.conteneur );

@+
0
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007
15 déc. 2006 à 15:12
salut girou et merci 1000 fois pour ton aide et la rapidité de tes conseils.
merci 1000 fois.
je teste...

julienD
0
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007
16 déc. 2006 à 10:53
salut,
une chose que je ne comprends pas est que tu passes le chemin du dossier en commentaire. alors bien sur j'ai tout essayé. mais rien ne fonctionne. j'ai bien precisé le nom du clip conteneur. puis enlevé les // et precisé le chemin du dossier...
que couic.
je cale là.
merci d'un coup de pouce supplémentaire.
julienD
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
16 déc. 2006 à 14:05
Salut,

désolé, j'avais laissé le loadMovie en commentaire car comme je ne disposais pas du dossier et des images et même du reste du script... j'ai mis en commentaire pour mes tests.

Bien, je l'ai toujours laissé en commentaire mais tu peux retirer les commentaires. J'ai ajouter un trace() qui te donne le nom, le chemin du fichier a charger ET SURTOUT le clip dans lequel l'image doit être chargée. si le trace te sort
...dans le conteneur: undefinedalors, c'est que tu ne transmet pas un clip valide comme parametre de la fonction.
Admettons que tu ai sur ta scene un clip vide ayant comme nom d'occurence conteneur et que tu veux y charger une photo, tu passes à la fonction chargerimage le parametre _root.conteneur -> soit :  chargerimage(_root.conteneur);
Si tu passes en parametre de la fonction un clip (EXISTANT !!! même si il est vide), tout devrait se passer normalement et le trace devrais te sortir ...dans le conteneur: _root.conteneur

memoire = [-1, -1, -1, -1];
function chargerimage(monClip:MovieClip) {
 var i:Number = memoire[3]; while (i memoire[0] or i memoire[1] or i == memoire[2] or i == memoire[3]) {
  i = Math.floor(Math.random()*25);
 }
 memoire.push(i);
 memoire.shift();
 //loadMovie("monDossier/im_0"+i+".jpg", monClip);
 trace("monDossier/im_0"+i+".jpg à charger dans le conteneur: "+monClip);
}
// A partir de ca, pour charger une image on appele la fonction en précisant en parametre le nom du clip ou doit être chargée l'image _root.conteneur dans l'exemple
chargerimage(_root.conteneur);

@+
0
juliendestouches Messages postés 30 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 16 mai 2007
18 déc. 2006 à 12:49
salut,
je n'ai pu tester tes modifications de code que ce matin. presque au point. j'ai dû, malgré tout, encore changer certaines petites choses. voici à quoi ça ressemble. mais tout d'abord je précise : j'ai dû mettre ce code dans une première image que j'ai ajoutée et qui ne joue qu'une fois (à la fin, un gotoAndPlay(2);). parce que ça ne marche pas sinon si j'appelle la fonction dans la première image à la suite directement... je ne comprends pas. j'appelle donc :
chargerimage();
dans la deuxième image et là ça marche. sauf que le clip fait un tour à vide. il n'y a pas d'image chargée au premier passage de la tête de lecture. est-ce à cause de la memorisation qui ne peut exister puisqu'il n'y a pas eu de chargement préalable? c'est pas bon en tout cas.
 donc image 1 (les noms de dossier et de clip sont bien sûr ceux que j'utilise):

memoire = [-1, -1, -1, -1];
function chargerimage() {
 var i:Number = memoire[3]; while (i memoire[0] or i memoire[1] or i == memoire[2] or i == memoire[3]) {
  i = Math.floor(Math.random()*25);
 }
 memoire.push(i);
 memoire.shift();
 loadMovie("bilder/im_0"+i+".jpg", MCimalea);


}

image 2:
chargerimage();

puis un
gotoandPlay(2);
à la fin du clip.

le plus curieux est que ça marche (à ce soucis près) dans le fla complet, un site web,  mais pas si je teste dans un nouveau document où il n'y a que le clip et ce code. puis un dossier "bilder" bien sûr avec les images.

si tu as le courage encore. reconnaissant je suis.
merci en tout cas.
et merci à tous les gens, sur ce site, qui consacrent du temps à prêter main forte à ceux qui, comme bibi, galèrent...

julienD
0
Rejoignez-nous