我第一次在ActionScript2.0中做一些工作(非常简单的事情,只是从文本文件中提取内容),我无法理解为什么我会在这里得到如此不可预测的输出。
有时,当我测试构建一个像这样的简单脚本时,变量会被列为未定义的变量,有时则不会。
我假设这可能是因为从cookware.txt加载的数据还没有加载到内存中,但情况似乎并非如此-根据Actionscript字典here,只有当程序的其余部分可以访问加载的数据时,onLoad函数才会触发。
有没有人能说点什么?或者明白为什么会发生这种事?
Cookware.txt的内容:
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同样,变量是否未定义似乎完全是随机的。这里发生什么事情?
发布于 2009-02-02 00:18:08
感谢大家的帮助-我没有点击之前,LoadVars()是一个异步函数,并且脚本的其余部分将继续而不检查它是否已加载。
我设法修复了这个问题,方法是检查每个帧上的loadVar是否已完成,然后在loadVar完成后执行代码。
我编译了用于测试的swf (命令+返回)。
发布于 2009-01-24 06:56:00
您可能遇到了scope chain问题。它在Flash中的工作方式非常令人困惑。简短的答案是将您的_global.pots和_global.kettles命名为与外部文件中使用的不同的名称,以避免冲突。
问题是,在你的函数中,“水壶”对象会引用本地的"this.kettles“对象,但前提是它被定义了。如果不是,那么它将引用"_global.kettles“对象。这使得OnLoad的设置行为难以预测。
发布于 2009-01-24 13:17:08
小范围建议:创建一个变量currentTimeline = _level0 (或您的levelN),您可以在onLoad函数的success部分内使用,避免名称冲突,只有在绝对必要时才使用_global。
https://stackoverflow.com/questions/475034
复制相似问题