Flash分配方案,错误或功能?

时间:2011-02-09 22:03:55

标签: flash actionscript-3 actionscript flash-cs5

拥有以下代码:

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

1 个答案:

答案 0 :(得分:2)

这里有很多遗漏。我想我看到了你的问题。首先,AS3的liveocs会告诉你一个Sound对象实例可以只加载一个外部mp3,所以删除标有//(1)的行只能运行一次就不足为奇了。

我在这里看到的另一个问题是,当你包含标有//(1)的行时,你永远不会调用loadingSound.addEventListener(Event.COMPLETE,onCompleteHandler)等。你可能将它添加到你的旧声音对象(如果你是,这里没有描述),但你绝对不会将它添加到你的新声音对象中。因此,新声音无法报告已完成加载,因此在完成后无法播放,因为您实际上从未知道它何时完成。

不是一遍又一遍地重复加载声音,更好的办法是加载声音一次,然后根据需要播放。

编辑:

现在我看到了监听器代码,我几乎肯定是问题所在。

  1. 创建新的声音对象后,它不会立即进入函数调用。您必须为您创建的每个新Object实例添加一个新的侦听器。
  2. 它使用的是匿名的,未绑定的功能。
  3. 每次创建新声音时都必须添加该功能,而不仅仅是第一次。