我在一段时间内第一次在Actionscript 2.0中做了一些工作(非常简单,只是从文本文件中提取内容),我无法理解为什么我会变得如此难以预料在这里输出。
有时当我测试构建这样一个简单的脚本时,变量会被列为未定义的,有时则不是。
我认为这可能是因为从cookware.txt加载的数据尚未加载到内存中,但似乎并非如此 - 根据Actionscript字典here ,onLoad函数仅在加载数据时触发,因为程序的其余部分可以访问。
任何人都能解开一些光明吗?或者看看为什么会发生这种情况?
pots=44&kettles=43
_global.pots;
_global.kettles;
trace('variables not assigned')
trace('before: kettles (global) = ' + _global.kettles);
trace('before: pots (global) = ' + _global.pots);
var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean):Void {
if (success) {
trace('variables clearly loaded: kettles = ' + kettles);
_global.kettles = this.kettles;
trace('assigned during loop: kettles in = ' + _global.kettles);
trace('pots = ' + kettles);
_global.pots = this.pots;
trace('during: pots = ' + _global.pots);
} else {
trace("Error");
}
}
my_lv.load("cookware.txt");
trace('after: kettles (global) = ' + _global.kettles);
trace('after: pots (global) = ' + _global.pots);
有时就是这样:
variables not assigned
before: kettles (global) = undefined
before: pots (global) = undefined
after: kettles (global) = undefined
after: pots (global) = undefined
variables clearly loaded: kettles = undefined
assigned during loop: kettles in = 43
pots = 43
during: pots = 43
有时就是这样:
variables not assigned
before: kettles (global) = 43
before: pots (global) = 44
after: kettles (global) = 43
after: pots (global) = 44
variables clearly loaded: kettles = 43
assigned during loop: kettles in = 43
pots = 43
during: pots = 43
同样,变量是否未定义似乎是完全随机的。这是怎么回事?
答案 0 :(得分:1)
您可能遇到scope chain个问题。它在Flash中的工作方式非常混乱。简短的回答是将_global.pots和_global.kettles命名为与外部文件中使用的内容不同的内容,以避免冲突。
问题在于,在你的函数中,“kettles”对象将引用本地的“this.kettles”对象,但仅限于它被定义。如果不是,那么它将引用“_global.kettles”对象。这使得OnLoad的设置行为难以预测。
答案 1 :(得分:0)
小范围建议:创建一个变量currentTimeline = _level0(或你的levelN),你可以在onLoad函数的success部分内部使用,避免名称冲突,只有在必要时才使用_global。
答案 2 :(得分:0)
这里可能存在一些范围问题,但我看不出如何
before: kettles (global) = 43
曾经发生过 - 你还没有调用过载荷。并且
after: kettles (global) = 43
可能不应该工作,因为加载将异步执行。 这似乎表明flash播放器在播放之间缓存了全局变量,但我之前没有听说过这种情况。你是怎么建造这个的?你是不是每次都在Flash IDE中编译swf?
是的,大卫所说的范围和这个,特别是我会追踪这个。为了保持一致性而不仅仅是水壶。
答案 3 :(得分:0)
感谢帮助人员 - 我之前没有点击过LoadVars()是一个异步函数,并且脚本的其余部分将继续,而不检查它是否已加载。
我设法通过检查loadVar在每个帧上完成,然后在loadVar完成后执行代码来解决这个问题。
我编译了swf进行测试(命令+返回)。