2013-07-06 3 views
1

Je travaille sur un projet flash dans lequel j'ai treize fichiers musicaux différents. Je veux que l'utilisateur puisse choisir quelle chanson joue en cliquant sur son bouton correspondant. Lorsque l'utilisateur clique sur l'un des treize boutons, je veux que la chanson en cours s'arrête et que la nouvelle chanson soit lue depuis le début afin qu'aucun son ne se chevauche. Quand je teste mon film, je trouve qu'au début, certains boutons arrêtent l'autre musique, mais d'autres non, et la nouvelle musique joue sur la musique actuelle (je suis sûr que le code pour chacun des boutons est identique sauf là où il y a des noms d'instance) Les boutons qui fonctionnent initialement, cessent de fonctionner après quelques clics. Les boutons font tout ce dont j'ai besoin, sauf pour arrêter la musique qui est déjà en cours de lecture.AS3. Comment puis-je éviter le chevauchement sonore?

J'ai utilisé un didacticiel pour apprendre comment utiliser le code ActionScript pour lire et contrôler les fichiers audio de la bibliothèque, mais mon code ne fonctionne pas correctement pour arrêter les fichiers audio. Je ne suis pas sûr pourquoi c'est ainsi je posterai du code ici. J'ai beaucoup de code puisqu'il y a 13 boutons différents, donc je ne posterai que le code pour un bouton. Le code pour le reste des boutons est le même sauf que les suffixes numériques sont modifiés pour être spécifiques à chaque bouton. Tout le code est sur l'image 1 du même symbole.

var music1Play:Music1 = new Music1(); 

var music1Channel:SoundChannel = new SoundChannel(); 

btnPiece1.addEventListener(MouseEvent.CLICK, playMusic1); 

function playMusic1(e:MouseEvent):void 

{ 
    music2Channel.stop(); 
    music3Channel.stop(); 
    music4Channel.stop(); 
    music5Channel.stop(); 
    music6Channel.stop(); 
    music7Channel.stop(); 
    music8Channel.stop(); 
    music9Channel.stop(); 
    music10Channel.stop(); 
    music11Channel.stop(); 
    music12Channel.stop(); 
    music13Channel.stop(); 

    btnPiece1.mouseEnabled = false; /*Disables button to avoid double click*/ 
    btnPiece1.mouseChildren = false; 

    btnPiece2.mouseEnabled = true; /*Enables the other buttons*/ 
    btnPiece3.mouseEnabled = true; 
    btnPiece4.mouseEnabled = true; 
    btnPiece5.mouseEnabled = true; 
    btnPiece6.mouseEnabled = true; 
    btnPiece7.mouseEnabled = true; 
    btnPiece8.mouseEnabled = true; 
    btnPiece9.mouseEnabled = true; 
    btnPiece10.mouseEnabled = true; 
    btnPiece11.mouseEnabled = true; 
    btnPiece12.mouseEnabled = true; 
    btnPiece13.mouseEnabled = true; 

    music1Channel = music1Play.play(); 

    music1Channel.addEventListener(Event.SOUND_COMPLETE, loopMusic1); 
} 

function loopMusic1(e:Event):void 

{ 
    music1Channel = music1Play.play(); 
    music1Channel.addEventListener(Event.SOUND_COMPLETE, loopMusic1); 
} 

S'il vous plaît laissez-moi savoir ce qui ne va pas avec le code ou suggère une autre méthode que je pourrais utiliser.

Thankyou,

Chris

Répondre

1

Voici un code pour vous aider. J'ai supprimé l'écouteur d'événement et ajouté int.MAX_VALUE en tant que quantité de boucle afin que le son continue à jouer jusqu'à ce que vous cliquiez sur un autre bouton. À ce stade, le son sera arrêté et les boutons seront activés, etc. Vérifiez-le et faites-moi savoir si cela vous aide:

var music1Play:Music1 = new Music1(); 

var playingChannel:SoundChannel; 

btnPiece1.addEventListener(MouseEvent.CLICK, playMusic1); 

var buttons:Array = [btnPiece1, btnPiece2, btnPiece3, btnPiece4, btnPiece5, btnPiece6, btnPiece7, btnPiece8, btnPiece9, btnPiece10, btnPiece11, btnPiece12, btnPiece13]; 

function enableAllButtons():void 
{ 
    for (var i:int = 0; i < buttons.length; i++)  
    { 
     buttons[i].mouseEnabled = true; 
     buttons[i].mouseChildren = true; 
    } 
} 

function stopCurrentChannel():void 
{ 
    if (playingChannel) 
    { 
     playingChannel.stop(); 
    } 
} 

function playMusic1(e:MouseEvent):void 
{ 
    stopCurrentChannel(); 

    enableAllButtons(); 

    btnPiece1.mouseEnabled = false; 
    btnPiece1.mouseChildren = false; 

    playingChannel = music1Play.play(0, int.MAX_VALUE); 
} 
+0

Cela a fonctionné parfaitement. Merci beaucoup. – chris

+0

De rien. –

Questions connexes