Chargement aléatoire de swf

manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010 - 7 oct. 2008 à 11:18
littlelawrent Messages postés 4 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 24 novembre 2009 - 24 nov. 2009 à 15:34
Bonjour à tous,
voila mon petit soucis:
J'ai fais ce petit code (AS2) qui me permets de charger aléatoirement des bannieres (swf) dans mon clip 'o_pub' :

this.createEmptyMovieClip('o_pub',0);                      
var chargement_aleatoire = Math.round(Math.random()*6);               
var Tableau:Array = ['entete_banniere_1_fr.swf', 'entete_banniere_2_fr.swf', 'entete_banniere_3_fr.swf', 'entete_banniere_4_fr.swf', 'entete_banniere_5_fr.swf', 'entete_banniere_6_fr.swf'];    
loadMovie(Tableau[chargement_aleatoire], o_pub);

Jusque la, tout va bien...
Maintenant mon but est qu'à la fin d'une banniere, elle charge automatiquement une autre sans relire la meme.

Comment faire? Quelqu'un saurait-il m'aider s'il-vous-plait?

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
7 oct. 2008 à 11:56
Hello,

L'idée est la suivante :

utiliser un moviecliploader pour charger la bannière car movieClipLoader génère un evenement onLoadInit qu'on va récupérer et utiliser pour lancer une fonction onEneterFrame sur le clip o_pub
cette fonction contrôle si l'animation jouée dans o_pub est terminée ou non (if (this._currentframe == this._totalframes) { ), si c'est le cas, on arrete l'animation et on détruit le onEnterframe. Juste avant on lance le chargement de la bannière suivante.
Et pour ne pas charger 2 fois de suite la même, on utilise une variable oldID.

this.createEmptyMovieClip('o_pub',0);                     
var chargement_aleatoire = -1        
var Tableau:Array = ['entete_banniere_1_fr.swf', 'entete_banniere_2_fr.swf', 'entete_banniere_3_fr.swf', 'entete_banniere_4_fr.swf', 'entete_banniere_5_fr.swf', 'entete_banniere_6_fr.swf'];   
var pub_mcl:movieClipLoader= new movieClipLoader()
pub_mcl.addListener(this);

 
function onLoadInit(mc:MovieClip) {
  o_pub.onEnterFrame= function(){
    if (this._currentframe == this._totalframes) {
      this.stop()
      loadNextBanner()
      delete (this.onEnterFrame)
    }
  }
}

function  loadNextBanner(){
  var oldID=chargement_aleatoire
  while(oldID==chargement_aleatoire){
    chargement_aleatoire = Math.round(Math.random()*6);              
  }
  mcLoader.loadClip(Tableau[chargement_aleatoire], o_pub);
}

loadNextBanner()
stop()

Bon, tout ca c'est de la théorie, alors pas sur que ca va marcher...

@+
0
manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010
7 oct. 2008 à 12:12
C'est impressionnant de voir du code tapé aussi facilement.
Vraiment..

Merci beaucoup, il y a une chose dont il n'apprecie pas:
'impossible de charger la classe ou l'interface 'Movie Clip loader'
référence à cette ligne: var pub_mcl:movieClipLoader= new movieClipLoader()

Je ne connais pas Movie Clip loader, mais cela me parait bien interessant.

Merci beaucoup Girou !
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
7 oct. 2008 à 12:33
ah oui...
c'est MovieClipLoader avec une majuscule à Movie...





@+
0
manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010
7 oct. 2008 à 13:55
Merci pour ton aide.
L'erreur est corrigé, mais rien ne se passe.

C'est certainement la bonne voie à suivre, il doit manquer quelque chose. Je cherche, des que j'ai la réponse, je mettrais un .fla propre ici.

Merci pour ta patience.
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
7 oct. 2008 à 14:02
encore une erreur de ma part (et sans doute pas la dernière...)
dans la fonction loadNextBanner

function  loadNextBanner(){
  mcLoader.loadClip(Tableau[chargement_aleatoire], o_pub);
a remplacer par
  pub_mcl.loadClip(Tableau[chargement_aleatoire], o_pub);
}

@+
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
7 oct. 2008 à 14:05
reprend le code complet ci-dessous

var pub_mc=this.createEmptyMovieClip('o_pub', this.getNextHighestDepth());                    
var chargement_aleatoire = -1       
var Tableau:Array = ['entete_banniere_1_fr.swf', 'entete_banniere_2_fr.swf', 'entete_banniere_3_fr.swf', 'entete_banniere_4_fr.swf', 'entete_banniere_5_fr.swf', 'entete_banniere_6_fr.swf'];  
var pub_mcl:MovieClipLoader= new MovieClipLoader()
pub_mcl.addListener(this);

 
function onLoadInit(mc:MovieClip) {
  pub_mc.onEnterFrame= function(){
    if (this._currentframe == this._totalframes) {
      this.stop()
      loadNextBanner()
      delete (this.onEnterFrame)
    }
  }
}

function  loadNextBanner(){
  var oldID=chargement_aleatoire
  while(oldID==chargement_aleatoire){
    chargement_aleatoire = Math.round(Math.random()*6);             
  }
  pub_mcl.loadClip(Tableau[chargement_aleatoire], pub_mc);
}

loadNextBanner()
stop()

@+
0
manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010
7 oct. 2008 à 14:11
C'est un code magnifiquement beau :)

il me charge correctement les bannieres mais ne passe pas à la suivante...

C'est formidable :)
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
7 oct. 2008 à 14:32
Probable probleme de ciblage dans la fonction onLoadInit
ajoute le trace() et dit moi ce que cela sort

function onLoadInit(mc:MovieClip) {
  pub_mc.onEnterFrame= function(){
    trace('this='+this+' currentFrame:'+this._currentframe +' totalFrames:'+this._totalframes)
    if (this._currentframe == this._totalframes) {
      this.stop()
      loadNextBanner()
      delete (this.onEnterFrame)
    }
  }
}

@+
0
manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010
7 oct. 2008 à 14:39
J'ai rajouté le trace(), :
this=_level0.o_pub currentFrame:0 totalFrames:1

Il faudrait pas mettre level1 ?
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
7 oct. 2008 à 14:53
non, rien a voir avec level1

tes banners sont composés d'une seule frame (avec eventuellement des clip dedans) ?
si c'est le cas, on va avoir un soucis !

soit tu crées une ligne du temps de la longuer (nombre de frame) de tes bannières dans chaque banniere,
( modifier aussi, if (this._currentframe == (this._totalframes-1))

soit a la fin de chaque 'animation' bannière tu appelles la fonction loadNextBanner() en faisant (a tester)
   loadNextBanner()
   this._parent.loadNextBanner()
   this._parent._parent.loadNextBanner()

@+
0
manguecarotte Messages postés 53 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 24 février 2010
7 oct. 2008 à 15:23
Mes bannieres sont composés d'une seule frame avec des clips à l'interieur.
J'ai suivi ton conseil, mettre:
loadNextBanner()
   this._parent.loadNextBanner()
   this._parent._parent.loadNextBanner()
à la fin de chaque animations...Il ne veut toujours pas..

 Je n'en puis plus...
 J'ai la tete qui chauffe...
0
cs_momad321 Messages postés 1 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 24 octobre 2008
24 oct. 2008 à 18:16
Pour un affichage aleatoire des swf non stop g prie le meme code avec un seul changement :
au niveau de la function  loadNextBanner()
// eliminer le stop();

Vioci le code :
var pub_mc=this.createEmptyMovieClip('o_pub', this.getNextHighestDepth());                   
var chargement_aleatoire = -1      
var Tableau:Array = ['pn_1.swf', 'pn_2.swf']; 
var pub_mcl:MovieClipLoader= new MovieClipLoader()
pub_mcl.addListener(this);

 
function onLoadInit(mc:MovieClip) {
  pub_mc.onEnterFrame= function(){
    if (this._currentframe == this._totalframes) {
      this.stop()
      loadNextBanner()
      delete (this.onEnterFrame)
    }
  }
}

function  loadNextBanner(){
  var oldID=chargement_aleatoire
   while(oldID==chargement_aleatoire){
    chargement_aleatoire = Math.round(Math.random()*1); 
    trace (chargement_aleatoire);
 }
  pub_mcl.loadClip(Tableau[chargement_aleatoire], o_pub);
 // stop()
}

loadNextBanner();

Baazi
0
littlelawrent Messages postés 4 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 24 novembre 2009
18 oct. 2009 à 11:29
Bonjour a vous!
j'utilise également votre code qui ma enormément aidé mais j'aimerais savoir si on peut allé un peut plus loin, j'entends par la est-ce que l'on peut utiliser une mémoire pour ne pas rechargé les 2 ou 3 dernière animation précedement chargé.
J'espere etre assez clair.
En gros une sorte d'aléatoire controlé :-)
Merci d'avance a vous
0
littlelawrent Messages postés 4 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 24 novembre 2009
24 nov. 2009 à 15:34
Personne pour m'aider?
J'ai pourtant pas mal chercher mais je n'arrive pas a garder en mémoire les 4 ou 5 dernières valeur pour éviter qu'elle ne soit tiré en aléatoire.
0
Rejoignez-nous