Objet sound() dans un clip chargé par loadClip

Objet sound() dans un clip chargé par loadClip - Flash/ActionScript - Programmation

Marsh Posté le 14-12-2005 à 17:44:07    

Salut all  :hello: ,
 
J'au un ptit soucis avec l'objet sound d'ActionScript.
 
J'ai un ptit preloader qui loadClipe (lol) mon clip préchargé sur la scène principale, une fois le chargement effectué.
 
Dans le fla de la scene principale, j'ai un objet sound que voilou :
 

Code :
  1. // GESTION DU SON
  2. monSon = new Sound();
  3. monSon.attachSound("zik" );
  4. monSon.setVolume(20);
  5. monSon.start();
  6. function baisserVol() {
  7. this.onEnterFrame = function() {
  8.  if (monSon.getVolume()>0) {
  9.   baisse = monSon.getVolume()-2;
  10.   monSon.setVolume(baisse);
  11.  } else {
  12.   this.onEnterFrame = false;
  13.   return false;
  14.  }
  15. };
  16. }
  17. function monterVol() {
  18. this.onEnterFrame = function() {
  19.  if (monSon.getVolume()<20) {
  20.   montee = monSon.getVolume()+2;
  21.   monSon.setVolume(montee);
  22.  } else {
  23.   this.onEnterFrame = false;
  24.   return false;
  25.  }
  26. };
  27. }


 
Le soucis c'est que, lorsque je lance le swf principal "dans" mon loader, la musique ne démarre pas. Par contre si je lance le swf principal "manuellement" (sans passer par le preloader), ca fonctionne.
Je pense que le probleme vient du fait que les 2 swf n'utilisent pas la même bibliothèque, et que du coup, la ligne "monSon.attachSound("zik" );" est foireuse.
 
Qu'en pensez vous messieurs ?  :p  
 
Merci d'avance a tlm.
 
PS :
 
Je met le code du loader, ca peut ptet servir..
 

Code :
  1. var image:MovieClip = this.createEmptyMovieClip("image", this.getNextHighestDepth());
  2. var mcLoader:MovieClipLoader = new MovieClipLoader();
  3. var listener:Object = new Object();
  4. listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void  {
  5. progression = (bytesLoaded/bytesTotal)*100;
  6. loading = Math.round(progression)+" %";
  7. barreloadover._width = progression*2;
  8. if (bytesLoaded == bytesTotal) {
  9.  clearInterval(interval.id);
  10.  gotoAndPlay(10);
  11. }
  12. };
  13. mcLoader.addListener(listener);
  14. mcLoader.loadClip("principal.swf", image);
  15. var interval:Object = new Object();
  16. interval.id = setInterval(checkProgress, 10, mcLoader, image, interval);
  17. function checkProgress(mcLoader:MovieClipLoader, image:MovieClip, interval:Object):Void {
  18. var progress:Object = mcLoader.getProgress(image);
  19. }


Reply

Marsh Posté le 14-12-2005 à 17:44:07   

Reply

Marsh Posté le 15-12-2005 à 00:47:48    

monSon = new Sound(this);
.. pour que ton son soit attaché à cette instance de mc en particulier ...
 
Et évite  
this.onEnterFrame = false;
mais plutôt
delete this.onEnterFrame;

Reply

Marsh Posté le 15-12-2005 à 16:27:25    

arf, j'ai le même problème...
 
en fait, je fait des animations... avec jusqu'a 8 niveaux de clips imbriqués...
j'ai besoin de pouvoir appeler un son n'importe quand depuis n'importe ou...
 
j'ai fait un :
 

Code :
  1. // on crée un objet son accessible depuis partout
  2. _global.monSon = new Son();


 
je l'appèle avec :
 

Code :
  1. _global.monSon.jouerSon("p01_sb01_s01.wav" )


 
 
 
dans ma classe son j'ai :
 

Code :
  1. class classes.Son extends Sound{
  2.   private var monSon:Sound;
  3.           function Son(){
  4.   monSon = new Sound();
  5.   }
  6. public function jouerSon(__monSon:String):Void{
  7.   trace("on joue : " +__monSon )
  8.   stopAllSounds();
  9.   monSon.attachSound(__monSon)
  10.   monSon.start();
  11.   }
  12. }//classe


 
 
 
 
bon, c'est pas super top... mais c'est adapté a mes anims....
tout marche bien c'est top
 
par contre, des que n'importe dans un autre swf pour faire un loading propre, ca marche plus !
 
la fonction est bien toujours appelée, le
trace("on joue : " +__monSon )
marche toujours bien par contre, le son n'est pas attaché... et ne se joue pas !
 
http://alpseb.free.fr/smart/liaisonSon.gif

Reply

Marsh Posté le 15-12-2005 à 17:12:39    

Mmmmmmh elle est "bizarre" ta classe 'Son' !! ( j'avais mis "foireuse" au départ mais ça risque de choquer .. alors disons juste "bizarre" )
 
Tu crées une classe qui dérive de Sound .. donc qui possède toutes les propriétés et fonctions de Sound .. et dans son constructeur, tu redéclares un objet Sound !!!
 
Tu m'expliques l'intérêt ???
 
Soit tu vires le 'extends Sound', soit tu vires le constructeur et tu remplaces 'monSon' par 'this' dans la fonction jouerSon ...
Sinon, tu te retrouves avec un objet Sound dans un dérivé de l'objet Sound ... :heink:
 
 

Reply

Marsh Posté le 15-12-2005 à 17:52:18    

Mr Mala a écrit :

Mmmmmmh elle est "bizarre" ta classe 'Son' !! ( j'avais mis "foireuse" au départ mais ça risque de choquer .. alors disons juste "bizarre" )
 
Tu crées une classe qui dérive de Sound .. donc qui possède toutes les propriétés et fonctions de Sound .. et dans son constructeur, tu redéclares un objet Sound !!!
 
Tu m'expliques l'intérêt ???
 
Soit tu vires le 'extends Sound', soit tu vires le constructeur et tu remplaces 'monSon' par 'this' dans la fonction jouerSon ...
Sinon, tu te retrouves avec un objet Sound dans un dérivé de l'objet Sound ... :heink:


 
 
hello, merci de porter un peu d'intéret a mes classes foireuses !!!
je t'explique le topo : je suis une brelle et je suis débutant AS 2... ya pas mal de conceptes qui m'achapent mais petit a petit je progresse...
ca me sauve la vie sur certains projets qui sont trop compliqués pour faire du AS1
 
bref, j'ai besoin de gérer un son...
un seul en meme temps (de la voie) voila pourquoi je cré un seul objet son... ca me permet d'etre sur que jamais ils vont se chevaucher...
 
je voulais une classe pour gérer mon son et pouvoir l'appeler de n'importe ou... que ca, rien d'autre. elle est donc tout petite...
j'ai essayé de faire une classe a la con, une static et d'autres trucs... mais c'est un peu flou pour moi et ca marchais pas bien... j'avias pas acces a la classe Sound depuis les classes que j'avais fait... bref, j'ai fais un truc qui hérite de sound pour utiliser ses méthodes...
 
c'est surement tres nul et je suis ouvert a 100% si t'as une proposition qui corespond a mon probleme ...
t'aurrasi fais quoi comme classe ?
 
 
 
maintenant j'ai ca :
 

Code :
  1. class classes.Son extends Sound{
  2. //--o  private properties
  3.  // constructeur
  4. function Son(){
  5.  trace("---------o classe Son" )
  6.  }
  7. //--o methode public
  8. public function jouerSon(__monSon:String):Void{
  9.  trace("on joue : " +__monSon )
  10.  stopAllSounds();
  11.  this.attachSound(__monSon)
  12.  this.start();
  13.  }
  14. }//classe


 
ca marche bien dans le swf mias toujours pareil, quand je le load dans un autre, la fonction jouerSon est bien appelée, (j'ai bien mon trace) mais pas de son...  
 
 
si tas une idée !
merci beaucoup pour ton aide en tous ca s!!  :hello:

Reply

Marsh Posté le 15-12-2005 à 19:39:21    

Ben voilà .. CA, c'est une "belle" classe propre ! :p
 
Bon, la solution, je l'ai donnée plus haut tu sais !
 
Donc, ta classe, avec passage d'un MovieClip en paramètre, deviendrait :

Code :
  1. class classes.Son extends Sound {
  2. function Son(mc:MovieClip) {
  3.   if(mc) {
  4.    super(mc);
  5.   }
  6.   else {
  7.    super();
  8.   }
  9. }
  10. public function jouerSon(__monSon:String):Void {
  11.   stopAllSounds();
  12.   this.attachSound(__monSon)
  13.   this.start();
  14. }
  15. }


Reply

Marsh Posté le 21-12-2005 à 10:45:40    

hello !  
merci pour tes infos !
j'ai modifier ma classe comme ca
le super ca veux dire quoi exactement ????....
je comrpend pas trop comment ca marche la :/
 
sinon, ca marche nikel dans mon flash, mais une fois mon SWF loadé dans un autre, comme avant... il veux pas attacher le son... je sais pas trop pourquoi !

Reply

Marsh Posté le 21-12-2005 à 14:08:10    

super() = appel du constructeur de la classe héritée ( le parent )
 
Et si ça ne marche toujours pas, c'est parce que je parie que tu n'as toujours pas fait  
_global.monSon = new Son(this);  

Reply

Marsh Posté le 21-12-2005 à 14:52:55    

WOOOOOO merci !!!
ca marche nikel ! super !!! merci bien ::) :) :) :) :)
 
bon alors, pour aller ma coucher moins con :
 

  • le super appel le construteur de la classe parent... ok... mais ca me sert a quoi ? a initialiser vraiment toutes les méthodes de Sound pour mon objet Son ?... je suis pas sur de saisir vraiment...
  • pourquoi passer un mc au constructeur ?
  • le else sert a quoi ? il sera actif dans quel cas ?
  • pourquoi passer un mc en parametre fais marcher le tout ?


 
merci d'avance :) :hello:

Reply

Marsh Posté le 21-12-2005 à 15:56:40    

si par exemple je veux utiliser une classe qui manipule des objets XML, je peut faire une :  
 
class Gestionxml extends XML {
}  
 
??.....
 
il faut que je remete un super ??
pour passer par exemple le XML à gérer, tu le passe donc pas dans le construteur mais plutot avec une méthode publique ,?
 
désolé pour mes questions de boulet, c'est pas évient à assimiler...

Reply

Marsh Posté le 21-12-2005 à 15:56:40   

Reply

Marsh Posté le 21-12-2005 à 15:57:13    

tiens au fait, j'adore ton jeu avec les petits cubes... j'ai fais 60 niveaux du niveau facile :d

Reply

Marsh Posté le 21-12-2005 à 16:07:09    

alpseb a écrit :

WOOOOOO merci !!!
ca marche nikel ! super !!! merci bien ::) :) :) :) :)


 
Ben tiens tu m'étonnes ! :D ... tss tss tss encore un qui s'imagine que je poste "des trucs" sans vérifier avant !  :whistle:  
 

alpseb a écrit :


  • le super appel le construteur de la classe parent... ok... mais ca me sert a quoi ? a initialiser vraiment toutes les méthodes de Sound pour mon objet Son ?... je suis pas sur de saisir vraiment...



 
En gros ... en très gros ...
 

alpseb a écrit :


  • pourquoi passer un mc au constructeur ?



 
Parce que je me tue à dire depuis le 2ème message de ce topic que Sound() peut avoir un MovieClip comme paramètre ... :ange:  
C'est clairement dans la doc en ligne dans l'éditeur Flash en plus ... je suis pas magicien, j'ai rien inventé ...
 
Et du coup, on passe ou pas ce paramètre facultatif au constructeur de la classe parent.
 

alpseb a écrit :


  • le else sert a quoi ? il sera actif dans quel cas ?



 
Ben quand il n'y aura pas de paramètre justement ...
 

alpseb a écrit :


  • pourquoi passer un mc en parametre fais marcher le tout ?



 
Je cherche toujours une explication simple et logique ... mais je te tiens au courant ...
Tout ce que je sais, c'est que Sound() définit un objet son global qui contrôle tout les sons de l'anim ..
Et Sound(target_MC) définit un objet son local à un movieclip ...
Cf doc online toujours ..


Message édité par Mr Mala le 21-12-2005 à 16:08:15
Reply

Marsh Posté le 21-12-2005 à 19:19:17    

merci pour tes réponses
 :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed