拥有以下代码:
var loadingSoundTitle:String;
var loadingSound:Sound = new Sound();
function loadFile(str:String)
{
loadingSound = new Sound(); //(1)
loadingSoundTitle = str;
try
{
loadingSound.load(new URLRequest(loadingSoundTitle));
}
catch(err:Error)
{
trace(err.message);
}
}
如果标有(1)的行在那里,则不起作用,但是如果我注释掉这一行,它能够在它停止工作之前加载一个文件。
在CS5下使用ActionScript 3.0
编辑:我是闪光灯的新手!
loadingSound.addEventListener(Event.COMPLETE, function(e:Event)
{
list.addItem({label:loadingSoundTitle, data:loadingSound});
process.value = 0; //for the nice little processbar I got :)
});
答案 0 :(得分:2)
这里有很多遗漏。我想我看到了你的问题。首先,AS3的liveocs会告诉你一个Sound对象实例可以只加载一个外部mp3,所以删除标有//(1)的行只能运行一次就不足为奇了。
我在这里看到的另一个问题是,当你做包含标有//(1)的行时,你永远不会调用loadingSound.addEventListener(Event.COMPLETE,onCompleteHandler)等。你可能将它添加到你的旧声音对象(如果你是,这里没有描述),但你绝对不会将它添加到你的新声音对象中。因此,新声音无法报告已完成加载,因此在完成后无法播放,因为您实际上从未知道它何时完成。
不是一遍又一遍地重复加载声音,更好的办法是加载声音一次,然后根据需要播放。
编辑:
现在我看到了监听器代码,我几乎肯定是问题所在。
每次创建新声音时都必须添加该功能,而不仅仅是第一次。