Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 mp3循环问题Actionscript 3_Actionscript 3_Loops_Mp3_Flash Cs5 - Fatal编程技术网

Actionscript 3 mp3循环问题Actionscript 3

Actionscript 3 mp3循环问题Actionscript 3,actionscript-3,loops,mp3,flash-cs5,Actionscript 3,Loops,Mp3,Flash Cs5,这太奇怪了,这篇文章不会让我以hello hi或howdy maybe cache issue开头,不管怎样,hello,我对AS3非常陌生,所以我的知识有限,希望各位专业人士能对新来的家伙放轻松:。 我正在建立一个flash网站,里面有一个循环的动画,我添加了一首mp3歌曲作为背景音乐,它也被设置为循环和自动播放。问题是,歌曲比动画长,当动画返回到第1帧时,歌曲与仍在播放的歌曲重叠。我希望这首歌在重新开始播放之前完全结束。是的,可能有一堆代码丢失了,但我离我想要的更近了,只需要你的帮助来润色一

这太奇怪了,这篇文章不会让我以hello hi或howdy maybe cache issue开头,不管怎样,hello,我对AS3非常陌生,所以我的知识有限,希望各位专业人士能对新来的家伙放轻松:。 我正在建立一个flash网站,里面有一个循环的动画,我添加了一首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;
}
}
感谢Josha,这是完整的工作代码,我添加了一个.addEventListener,以便歌曲在播放结束后循环播放。


我还不能发表评论,所以必须使用答案

您是否将代码作为单独的文件放置在不同的文件中;或者该代码是否放置在动画的第一帧

如果是后者,那你确实会听到重叠的声音。由于每次播放头返回第1帧时都会执行actionscript代码;创建新的声音对象并开始播放该声音

一个简单的解决方案是在最后一帧创建关键帧,并添加以下动作脚本:

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;
  }
}

老兄,太谢谢你了,我想弄明白这件事快发疯了。我必须添加一个事件监听器,这样它才能循环。对于所有像我这样的新手来说,感谢Josha,完整的工作代码在我的第一篇文章中编辑;如果要添加更多actionscript,您可能需要查看如何将MovieClip链接到外部actionscript文件。
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;
  }
}