Как управлять звуком кнопок мувиклипа на основной временной шкале? - PullRequest
1 голос
/ 24 марта 2012

У меня проблемы с попыткой манипулировать музыкой с помощью кнопок

  1. Не получается сделать music1 автозапуск и цикл при запуске фильма.

  2. Я хочу остановить music1 и играть music2, когда я нажимаю кнопку:

    • music1 на основной временной шкале
    • кнопка для изменения музыкивнутри мувиклипа

пока здесь есть код, который я нашел в интернете, но я не уверен, как я могу изменить его, чтобы сделать то, что мне нужно:

var mySound:Sound;
var myChannel:SoundChannel;
var isPlaying:Boolean = false;
var isPaused:Boolean = false;
var p:uint = 0;
var songfile:String;
var songtitle:String;

song1_btn.addEventListener(MouseEvent.CLICK, playSound);
song2_btn.addEventListener(MouseEvent.CLICK, playSound);
song3_btn.addEventListener(MouseEvent.CLICK, playSound);
stop_btn.addEventListener(MouseEvent.CLICK, stopSound);
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);

function stopSound(myEvent:MouseEvent):void {
    if (isPlaying) {
        myChannel.stop();
        p = 0;
        isPlaying = false;
        isPaused = false;
    }
}

function playSound(myEvent:MouseEvent):void {
    switch(myEvent.target.name) {
        case "song1_btn":
            songfile = "bgm1.mp3";
            songtitle = "one";
            break;
        case "song2_btn":
            songfile = "bgm2.mp3";
            songtitle = "two";
            break;
        case "song3_btn":
            songfile = "bgm3.mp3";
            songtitle = "Three";
            break;
    }
    mySound = new Sound;
    mySound.load(new URLRequest(songfile));
    title_txt.text = songtitle;
    if (isPlaying) {
        myChannel.stop();
        myChannel = mySound.play(0);
    } else {
        myChannel = mySound.play(0);
        isPlaying = true;
    }
}

function pauseSound(myEvent:MouseEvent):void {
    if (isPlaying) {
        p = Math.floor(myChannel.position);
        myChannel.stop();
        isPlaying = false;
        isPaused = true;
    } else if (isPaused) {
        myChannel = mySound.play(p);
        isPlaying = true;
        isPaused = false;
    }
}

title_txt.text = "This text will be replaced.";

Примечание: этот код находится на основной временной шкале.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

попытался отредактировать код, так как кнопки находятся под 2-мя слоями мувиклипа .. моя ошибка .. вот код, но он возвращает ошибку, когда я пытался воспроизвести фильм

var mySound:Sound;
var myChannel:SoundChannel;

//song files
var music1:String="sounds/music1.mp3";
var music2:String="sounds/music2.mp3";

//initially load and loop music1
loopMusic(music1);

//button to change to music2 inside movieclip
mc_university.mc_hymn.myButton2.addEventListener(MouseEvent.CLICK, button2_handler);

//button to change back to music1 inside movieclip
//initially disabled since music1 is playing
mc_university.mc_hymn.myButton1.addEventListener(MouseEvent.CLICK, button1_handler);
mc_university.mc_hymn.myButton1.enabled=false;

function loopMusic(songName:String):void
{
//stop music currently playing
if(myChannel)
myChannel.stop();

//initialize sound var
mySound = new Sound();

//load song
mySound.load(new URLRequest(songName));

//set up event listener
mySound.addEventListener(Event.COMPLETE, songLoaded_handler);

  }

  function songLoaded_handler(evt:Event):void 
  {
  //loop loaded song 
  myChannel = mySound.play(0, int.MAX_VALUE);
  }

  function button1_handler(e:Event):void
  {
  loopMusic(music1);

  //toggle buttons
  mc_university.mc_hymn.myButton2.enabled=true;
  mc_university.mc_hymn.myButton1.enabled=false;


}

    function button2_handler(e:Event):void
{
  loopMusic(music2);

  //toggle buttons
  mc_university.mc_hymn.myButton1.enabled=true;
  mc_university.mc_hymn.myButton2.enabled=false;


}

Не знаю, что пошло не так.... даже если я поместил кнопки на основной временной шкале или внутри видеоклипа, как в оригинальном коде, он все равно выдаст ту же ошибку

0 голосов
/ 26 марта 2012

Надеюсь, этот код похож на то, что вы ищете, я постарался упростить ситуацию на случай, если вы захотите что-то изменить, чтобы лучше соответствовать вашим потребностям:

var mySound:Sound;
var myChannel:SoundChannel;

//song files
var music1:String="music1.mp3";
var music2:String="music2.mp3";

//initially load and loop music1
loopMusic(music1);

//button to change to music2 inside movieclip
myMovieclip.myButton2.addEventListener(MouseEvent.CLICK, button2_handler);

//button to change back to music1 inside movieclip
//initially disabled since music1 is playing
myMovieclip.myButton1.addEventListener(MouseEvent.CLICK, button1_handler);
myMovieclip.myButton1.enabled=false;

function loopMusic(songName:String):void
{
  //stop music currently playing
  if(myChannel)
    myChannel.stop();

  //initialize sound var
  mySound = new Sound();

  //load song
  mySound.load(new URLRequest(songName));

  //set up event listener
  mySound.addEventListener(Event.COMPLETE, songLoaded_handler);

}

function songLoaded_handler(evt:Event):void 
{
//loop loaded song 
    myChannel = mySound.play(0, int.MAX_VALUE);
}

function button1_handler(e:Event):void
{
    loopMusic(music1);

    //toggle buttons
    myMovieclip.myButton2.enabled=true;
    myMovieclip.myButton1.enabled=false;


}

function button2_handler(e:Event):void
{
    loopMusic(music2);

    //toggle buttons
    myMovieclip.myButton1.enabled=true;
    myMovieclip.myButton2.enabled=false;


}
...