MovieClip引用在onLoadComplete回调中出错

时间:2010-03-09 14:33:07

标签: flash actionscript-2

我正在将一堆图像加载到我的AS2 flash电影中,我遇到了一些奇怪的现象。

粗略地说,我的代码看起来像这样:

function doTheLoading()
{
    m_imageClips = [];

    for (var i:Number = 0; i < 3; i++) 
    {
        var imageUrl:String = "http://server/" + i + ".jpg";

        var mc :MovieClip = m_mc.createEmptyMovieClip("name"+i, i + 1);

        m_imageClips.push( mc );

        var mcLoader:MovieClipLoader = new MovieClipLoader();
        mcLoader.addListener(this);
        mcLoader.loadClip(imageUrl, mc);
    }

    myDebug("array1: "+m_imageClips);
}


function onLoadComplete(mc:MovieClip)
{
    myDebug("array2: " + m_imageClips );
    myDebug("type: " + typeof(m_imageClips[0]) );

    for (var i:Number = 0; i < m_imageClips.length; i++) 
    {
        if (mc == m_imageClips[i]) 
        {
            /* This line is never reached. */
        }
    }
}

输出看起来像

array1: mc.0.jpg, mc.1.jpg, mc.2.jpg
array2: ,,
type: movieclip
array2: ,,
type: movieclip
array2: ,,
type: movieclip

所以我的问题是为什么我的数组内容在onLoadComplete调用时似乎发生了变化?如果数组超出范围,为什么我仍然可以看到数组的长度并确定内容的类型?

1 个答案:

答案 0 :(得分:0)

我发布的代码点工作正常,所以我认为你的问题必须在其他地方。你可以发布更多的代码吗?


顺便说一句,Ross's answer表示存在范围问题,但它比这更复杂......

m_imageClips 超出范围是不正确的:如果您在分配之前未声明 m_imageClips (带有var语句)它是[]的值,然后它将自动声明。

  

许多编程语言都需要   要在数据之前声明的变量   可以存入其中;失败了   这样做会导致错误。   ActionScript并不严格。要是我们   为一个变量赋值   不存在,翻译将创建   我们的新变量。    - (Colin Moock,行动文章权威指南)

在这种情况下,它将在主时间轴的范围内声明,因此doTheLoading()onLoadComplete()函数都可以使用它。因此代码运行正常,因为你已经显示它。

这也意味着如果您确实想使用Ross的解决方案(使用return语句等),则需要使用doTheLoading()声明 m_imageClips 为本地{}}该功能内的 var m_imageClips = [];。虽然有点倍增,但你最终会在同一个地方......