Flash 闪存分配方案、错误或功能?

Flash 闪存分配方案、错误或功能?,flash,actionscript-3,actionscript,flash-cs5,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));

具有以下代码:

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

编辑:我对flash完全是新手

loadingSound.addEventListener(Event.COMPLETE, function(e:Event)
{
    list.addItem({label:loadingSoundTitle, data:loadingSound});
    process.value = 0; //for the nice little processbar I got :)
});

这里缺少很多东西。我想我明白你的问题是什么了。首先,AS3 livedocs会告诉您一个声音对象实例可以加载一个且只能加载一个外部mp3,因此删除标有//(1)的行将起作用,但只能加载一次也就不足为奇了

我在这里看到的另一个问题是,当您包含标有//(1)的行时,您从未调用loadingSound.addEventListener(Event.COMPLETE、onCompleteHandler)或类似的函数。您可能会将其添加到旧的声音对象中(如果是,此处未对其进行描述),但您肯定不会将其添加到新的声音对象中。因此,由于新声音无法报告加载完成,因此无法在加载完成后播放,因为您永远不知道加载何时完成

与反复加载声音不同,更好的处理方法是加载一次声音,然后根据需要播放

编辑:

现在我看到了侦听器代码,我几乎肯定这就是问题所在

  • 创建新的声音对象后,它不会立即出现在函数调用中。您必须为创建的每个新对象实例添加一个新的侦听器
  • 它使用一个匿名的未绑定函数

  • 您必须在每次创建新声音时添加该函数,而不仅仅是第一次。

    什么是“不起作用”的意思-是否存在编译错误?你收到错误信息了吗?文件是否加载,但声音不播放?是哪一个?啊,对不起,问题是,函数运行得很好,没有编译错误,没有错误消息,什么都没有,监听事件根本不会产生任何效果。-进度、完成和负载从不抛出;这根本不起作用我有点意识到它与分配有关,所以我发现了错误/功能?好的,我得到了一个loadingSound。addEventListener(Event.COMPLETE,…)在这里,它几乎只是将loadingSound处理到一个列表中,其思想是它的加载,一旦加载,它保存在一个列表中,相同的临时变量(loadingSound)可以重用,只要用一个新的声音对象重新分配它,垃圾收集器就不应该重新分配加载的声音,因为它是从列表中引用的。-因为我正在尝试做的事情,不可能一次只加载一个文件。+我尝试将几个文件加载到一个数组中,但没有成功。那就是你出错的地方。声音对象始终和永远只引用一个外部mp3。您需要创建一个新的声音对象来加载新的mp3。当您将原始声音对象传递到列表中时,您真正要做的就是在两个位置创建对该对象的引用。因此,即使您可以重复使用相同的“temp变量”,而不创建新的声音对象,在这种情况下,您也会破坏性地更改列表引用的声音。Flash总是通过引用传递和分配任何“对象”,并且总是通过值传递和分配任何原语。好吧,如果你说的是真的,那么重新分配行(1)不应该生成一个新的声音对象,这样列表中的一个将是唯一保存旧声音对象的吗我的意思是,我正在加载,然后引用列表中的声音,通过将一个新声音分配给loadingsound varIt来有效地使之成为唯一的引用,但是正如我所说的,我从来没有在这个新声音()下面看到addEventListener调用。如果事实上您真的要添加一个新的侦听器,而示例代码中没有描述它,那么在这一点上,清楚地说明出了什么问题可能更具指导意义,因为在这一点上它看起来很模糊。