2015-10-07 5 views
0

D'accord, je suis un noob total en flash as3 donc cela doit être très facile à résoudre je suppose. Je fais une table d'harmonie avec des voix enregistrées en flash cs6, très simple: 1 frame, 10 boutons, chaque bouton donne un son différent. Le problème est le chevauchement de ces sons, alors ce dont j'ai besoin, c'est que lorsque j'appuie sur un bouton, les autres sons cessent de jouer. quelqu'un s'il vous plaît?FLASH AS3 Sound Overlap

Répondre

0

Voir la documentation de la méthode play() dans la classe Sound, elle renvoie un objet SoundChannel, qui a une méthode stop().

Ainsi, vous pouvez le faire comme ça (de façon schématique):

var currentChannel:SoundChannel; 

button1.addEventListener(MouseEvent.CLICK, onButtonClick); 
button2.addEventListener(MouseEvent.CLICK, onButtonClick); 
button3.addEventListener(MouseEvent.CLICK, onButtonClick); 

function onButtonClick(event:MouseEvent):void 
{ 
    /* provided you have implemented selectSoundByButton func somewhere */ 

    const sound:Sound = selectSoundByButton(event.currentTarget); 

    if (currentChannel) { 
     currentChannel.stop(); 
    } 

    currentChannel = sound.play(); 
} 

Une description plus détaillée:

Disons que vous voulez créer une autre application bouton péter en flash. C'est ce que vous avez à faire:

  1. Créez un symbole de bouton, ajoutez-le à la scène et donnez-lui un nom d'occurrence dans l'onglet Propriétés. Appelons-le myButton
  2. Ajoutez le son à la bibliothèque avec le fichier-> import
  3. Exportez ce son en actionscript. Faites un clic droit sur un son dans la bibliothèque, cochez "Exporter pour actionscript", "exporter dans l'image 1" dans "onglet ActionScript". Remplissez l'entrée "Class" avec un nom de classe désiré pour un son (par exemple MySound)
  4. Ensuite, vous devez déclencher la lecture du son sur votre bouton. Donc, vous devez mettre le code suivant à la première image de votre clip flash:

    import flash.media.Sound; 
    import flash.media.SoundChannel; 
    import flash.events.MouseEvent; 
    
    var currentChannel:SoundChannel; 
    const mySound:Sound = new MySound(); 
    
    function onClick(e:MouseEvent):void {  
        if (currentChannel) { 
         currentChannel.stop(); 
        } 
        currentChannel = mySound.play(); 
    } 
    
    myButton.addEventListener(MouseEvent.CLICK, onClick); 
    
+0

hey man merci pour votre réponse. Je ne sais vraiment pas ce que tu veux dire, alors disons qu'il n'y a qu'un seul bouton. Pouvez-vous me dire ce qu'il faut faire chaque fois que j'appuie sur le bouton, le son recommence mais sans chevauchement, où est-ce que je mets ce code. – AdamXpelled

+0

ok. Je vais le réécrire de manière plus détaillée. – leetwinski

+0

J'ai suivi les étapes mais en vain. le bouton est maintenant appelé "myButton" et la classe pour le son (avec le nom "goodmorning") est appelée "MySound" comme vous l'avez suggéré, donc je pourrais coller le code sans aucun changement, mais ne fonctionne pas encore. chaque fois que je clique sur le bouton, un nouveau son arrive. dites-moi, est-ce plus facile dans AS2? peut-être que je pourrais recommencer. J'apprécie votre aide frère. – AdamXpelled

-1

Ajouter à votre code sur chaque bouton avant de jouer un son:

SoundMixer.stopAll(); 

Si vous êtes Si vous ajoutez des actions directement depuis le montage dans Adobe Flash, il n'est pas nécessaire d'importer la classe. Si vous travaillez à partir d'un IDE comme FlashDevelop ou FlashBuilder, ajoutez ce code au début (après Package {):

import flash.media.SoundMixer; 

Bonne programmation!

Éditer: More info on the SoundMixer class

+0

résoudre la question PO mais en offrant potentiellement un autre problème. Voté vers le bas. SoundMixer.stopAll(); va arrêter tout son en cours de lecture et pas seulement ceux mentionnés dans la question. Que faire si PO a besoin d'une musique de fond plus tard? Ou si d'autres sons sont supposés jouer ailleurs? La solution proposée ici créera plus de problèmes qu'elle n'en a résolu. – BotMaster

+0

Ce n'est pas une mauvaise fonction à savoir. J'aurais suggéré quelque chose de plus en profondeur que cela (comme stocker le son d'une variable et arrêter le son avant de jouer le suivant). Cependant, l'OP a posté qu'ils étaient un noob et je doute qu'ils ajoutent de la musique de fond. C'est une solution rapide pour quelqu'un qui ne sait pas ou ne veut pas coder. –