我正在将一堆图像加载到我的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调用时似乎发生了变化?如果数组超出范围,为什么我仍然可以看到数组的长度并确定内容的类型?
答案 0 :(得分:0)
我发布的代码点工作正常,所以我认为你的问题必须在其他地方。你可以发布更多的代码吗?
顺便说一句,Ross's answer表示存在范围问题,但它比这更复杂......
说 m_imageClips 超出范围是不正确的:如果您在分配之前未声明 m_imageClips (带有var
语句)它是[]
的值,然后它将自动声明。
许多编程语言都需要 要在数据之前声明的变量 可以存入其中;失败了 这样做会导致错误。 ActionScript并不严格。要是我们 为一个变量赋值 不存在,翻译将创建 我们的新变量。 - (Colin Moock,行动文章权威指南)
在这种情况下,它将在主时间轴的范围内声明,因此doTheLoading()
和onLoadComplete()
函数都可以使用它。因此代码运行正常,因为你已经显示它。
这也意味着如果您确实想使用Ross的解决方案(使用return
语句等),则需要使用doTheLoading()
声明 m_imageClips 为本地{}}该功能内的 var
m_imageClips = [];
。虽然有点倍增,但你最终会在同一个地方......