首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Actionscript 2.0在这里有不可预测的输出?

为什么Actionscript 2.0在这里有不可预测的输出?
EN

Stack Overflow用户
提问于 2009-01-23 23:17:25
回答 4查看 647关注 0票数 1

我第一次在ActionScript2.0中做一些工作(非常简单的事情,只是从文本文件中提取内容),我无法理解为什么我会在这里得到如此不可预测的输出。

有时,当我测试构建一个像这样的简单脚本时,变量会被列为未定义的变量,有时则不会。

我假设这可能是因为从cookware.txt加载的数据还没有加载到内存中,但情况似乎并非如此-根据Actionscript字典here,只有当程序的其余部分可以访问加载的数据时,onLoad函数才会触发。

有没有人能说点什么?或者明白为什么会发生这种事?

Cookware.txt的内容:

代码语言:javascript
复制
pots=44&kettles=43

代码

代码语言:javascript
复制
_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);

输出:

有时是这样的:

代码语言:javascript
复制
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

有时候是这样的:

代码语言:javascript
复制
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

同样,变量是否未定义似乎完全是随机的。这里发生什么事情?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-02 00:18:08

感谢大家的帮助-我没有点击之前,LoadVars()是一个异步函数,并且脚本的其余部分将继续而不检查它是否已加载。

我设法修复了这个问题,方法是检查每个帧上的loadVar是否已完成,然后在loadVar完成后执行代码。

我编译了用于测试的swf (命令+返回)。

票数 0
EN

Stack Overflow用户

发布于 2009-01-24 06:56:00

您可能遇到了scope chain问题。它在Flash中的工作方式非常令人困惑。简短的答案是将您的_global.pots和_global.kettles命名为与外部文件中使用的不同的名称,以避免冲突。

问题是,在你的函数中,“水壶”对象会引用本地的"this.kettles“对象,但前提是它被定义了。如果不是,那么它将引用"_global.kettles“对象。这使得OnLoad的设置行为难以预测。

票数 1
EN

Stack Overflow用户

发布于 2009-01-24 13:17:08

小范围建议:创建一个变量currentTimeline = _level0 (或您的levelN),您可以在onLoad函数的success部分内使用,避免名称冲突,只有在绝对必要时才使用_global。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/475034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档