mp3 Looping Задачи-Actionscript 3 - PullRequest
       18

mp3 Looping Задачи-Actionscript 3

0 голосов
/ 24 октября 2011

Это так странно, этот пост не позволяет мне начинать предложение с привет, привет или привет, может, проблема с кешем, в любом случае, привет, я очень новичок в AS3, поэтому мои знания ограничены, надеюсь, что профессионалы могут легкона нового парня :).Я создаю флеш-сайт с анимацией, которая зацикливается, и я добавил mp3-песню в качестве фоновой музыки, он также настроен на зацикливание и автоматическое воспроизведение.проблема в том, что песня длиннее анимации, и когда анимация возвращается к кадру 1, песня перекрывает ту, которая все еще воспроизводится.Я бы хотел, чтобы песня полностью закончилась, прежде чем она снова начнет играть.да, возможно, там не хватает кучи кода, но я подошел ближе к тому, что хочу, просто нужна ваша помощь, чтобы немного его отшлифовать.

вот код на данный момент

import flash.events.MouseEvent;
import flash.media.Sound;
import flash.net.URLRequest;

//var codes
var AutoPlay:Boolean=true;
var isPlaying:Boolean=false;
var pausePosition:Number=0;
var myMusic:Sound=new Sound();
var soundFile:URLRequest=new URLRequest("Fluke.mp3");
myMusic.load(soundFile);
var channel:SoundChannel;

//if commands
if (AutoPlay==true) {
channel=myMusic.play(pausePosition);
isPlaying=true;
}

//pausebutton functions
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);
function pauseSound(e:MouseEvent):void
{
if (isPlaying == false) {
channel = myMusic.play(pausePosition);
isPlaying =true;
}else{
pausePosition=channel.position;
channel.stop();
isPlaying=false;
}
}

//playbutton functions
play_btn.addEventListener(MouseEvent.CLICK,playMus ic);
function playMusic(event:MouseEvent):void
{ if (isPlaying== false) {
channel=myMusic.play(pausePosition);
isPlaying=true;
}
}


THIS - это полный рабочий код, благодаря Josha, с добавлением .addEventListener, который я добавил, чтобы песня зациклилась после завершения воспроизведения.

import flash.events.MouseEvent;
import flash.media.Sound;
import flash.net.URLRequest;


//var codes
var AutoPlay:Boolean=true;
var isPlaying:Boolean;
var pausePosition:Number;
var myMusic:Sound;
var soundFile:URLRequest;
var channel:SoundChannel;

// only create music and register event listeners one time
if (myMusic == null)
{
  soundFile = new URLRequest("Fluke.mp3");
 myMusic = new Sound();
  myMusic.load(soundFile);
 pausePosition = 0;
 if (AutoPlay) 
  {
    channel = myMusic.play(pausePosition);
isPlaying = true;
  }
  else
  {
isPlaying = false;
}
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);
play_btn.addEventListener(MouseEvent.CLICK, playMusic);
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
}

channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
function onPlaybackComplete(event:Event) {
pausePosition = 0;
channel = myMusic.play(pausePosition);
isPlaying = true;
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
}


//playbutton functions
function pauseSound(e:MouseEvent):void
{
  if (isPlaying == false) {
    channel = myMusic.play(pausePosition);
    isPlaying =true;
    channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
  }else{
    pausePosition=channel.position;
    channel.stop();
    isPlaying=false;
  }
}

//playbutton functions
function playMusic(event:MouseEvent):void
{ 
  if (isPlaying== false) {
    channel=myMusic.play(pausePosition);
    isPlaying=true;
    channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
  }
}

1 Ответ

0 голосов
/ 24 октября 2011

Я пока не могу оставлять комментарии, поэтому должен использовать ответ.

Вы размещаете свой код в отдельных файлах AS; или этот код помещен в первый кадр вашей анимации?

Если последнее так, то вы действительно получите перекрывающиеся звуки. Поскольку код actionScript выполняется каждый раз, когда точка воспроизведения возвращается к кадру 1; создать новый объект Sound и начать воспроизводить этот звук.

Простым решением является создание ключевого кадра в последнем кадре и добавление следующего сценария действия:

gotoAndPlay(2);

Это зациклит вашу анимацию из кадра 2, пропуская сценарий действия.

Другое решение, которое может сработать (вам придется его протестировать):

import flash.events.MouseEvent;
import flash.media.Sound;
import flash.net.URLRequest;


//var codes
var AutoPlay:Boolean=true;
var isPlaying:Boolean;
var pausePosition:Number;
var myMusic:Sound;
var soundFile:URLRequest;
var channel:SoundChannel;

// only create music and register event listeners one time
if (myMusic == null)
{
  soundFile = new URLRequest("Fluke.mp3");
  myMusic = new Sound();
  myMusic.load(soundFile);
  pausePosition = 0;
  if (AutoPlay) 
  {
    channel = myMusic.play(pausePosition);
    isPlaying = true;
  }
  else
  {
    isPlaying = false;
  }
  pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);
  play_btn.addEventListener(MouseEvent.CLICK, playMusic);
}

//playbutton functions
function pauseSound(e:MouseEvent):void
{
  if (isPlaying == false) {
    channel = myMusic.play(pausePosition);
    isPlaying =true;
  }else{
    pausePosition=channel.position;
    channel.stop();
    isPlaying=false;
  }
}

//playbutton functions
function playMusic(event:MouseEvent):void
{ 
  if (isPlaying== false) {
    channel=myMusic.play(pausePosition);
    isPlaying=true;
  }
}
...