非常感谢任何帮助。
我正在加载这样的声音:
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:找不到类型或者不是编译时常量:事件。”
任何人都可以给我一个关于我做错的提示吗?
感谢。
答案 0 :(得分:1)
更改
function audioComplete(Event:Event){
到
function audioComplete(event:Event){
AS区分大小写。 event
与Event
不同。 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!");
}