AS3在第一个完成后播放第二个音频文件

时间:2011-10-14 21:08:49

标签: actionscript-3 audio compiler-errors

非常感谢任何帮助。

我正在加载这样的声音:

var mySound:Sound = new Sound();
mySound.load(new URLRequest("audio/filename.mp3"));
mySoundChannel:SoundChannel = mySound.play();

然后我添加一个监听器并试图用SOUND_COMPLETE事件调用一个函数,如下所示:

mySoundChannel.addEventListener(Event.SOUND_COMPLETE,audioComplete);
function audioComplete(Event:Event){
trace("done!");
}

但是,我一直收到这个错误:“1046:找不到类型或者不是编译时常量:事件。”

任何人都可以给我一个关于我做错的提示吗?

感谢。

4 个答案:

答案 0 :(得分:1)

更改

function audioComplete(Event:Event){

function audioComplete(event:Event){

AS区分大小写。 eventEvent不同。 Event是类的名称。 event是您分配给Event

类型的局部变量的名称

此外,声音以异步方式加载到Flash中。这意味着当您调用sound.load()时,Flash Player将开始在新线程上加载声音,并在加载声音时继续下一行代码。当声音完全加载时会触发Event.COMPLETE事件,声音播放完毕后会

要在声音播放完毕后触发功能,请使用setTimeout

var mySound:Sound = new Sound();
mySound.load(new URLRequest("audio/filename.mp3"));
mySound.addEventListener(Event.COMPLETE, soundLoaded);

function soundLoaded(e:Event):void {
    mySound.play();
    setTimeout(audioComplete, mySound.length);
}
function audioComplete(){
    trace("done!");
}

答案 1 :(得分:0)

尝试更改

function audioComplete(Event:Event){

function audioComplete(e:Event){

不要为变量名使用类名是个好主意。它可能会混淆编译器和尝试读取代码的程序员。

答案 2 :(得分:0)

导入Event类: import flash.events.Event

package
{
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;

    
    public class Test extends Sprite
    {
        
        private var _sound : Sound:
        private var _soundChannel : SoundChannel:

        public function Test() : void
        {
            playSound("audio/filename.mp3");
        }
    
        private function playSound(url : String) : void
        {
            // start sound here
            _sound = new Sound();
            _sound.load(new URLRequest(url));
            _soundChannel = mySound.play();

            _soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
        }

        private function onSoundComplete(event : Event) : void
        {
            // sound is complete
            _soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete);

            // play next sound
        }
    }   
}

答案 3 :(得分:0)

感谢那些回复的人。我最终找到了一个更好的方法来做到这一点。如果有人遇到同样的问题,这里有什么对我有用:

var mySound:Sound = new Sound();
var mySoundURL:URLRequest = new URLRequest("myfile.mp3");
var mySoundChannel:SoundChannel = new SoundChannel();
mySound.load(mySoundURL);
mySoundChannel = mySound.play();
mySoundChannel.addEventListener(Event.SOUND_COMPLETE, endMySound);

function endMySound(e:Event):void{
trace("sound is complete!");
}