2

多年来我没有接触过 Actionscript,但这让我大吃一惊……不过,它应该相当容易。

好的,我创建了一个简单的测试场景。我的库中有一个名为“mcTest”的影片剪辑。这是一个简单的正方形,在第 1 帧(唯一的帧)上有以下动作。

var test = false;

function setTest() {
  test = true;
  trace(test);
}

this.addEventListener(MouseEvent.CLICK, click_handler);

function click_handler(e:MouseEvent) {
  trace(test);
}

在舞台上(第 1 帧,也是唯一的帧)我有以下代码:

var objTest:MovieClip = new mcTest();
objTest.setTest();
addChild(objTest);

当项目运行时,控制台会给我预期的“真”。单击 MovieClip 后,我得到了意想不到的“False”。好像变量被重置了。这是怎么回事?如果我删除“objTest.setTest();” 从主阶段,只需添加行“setTest();” 在 MovieClip 本身内部,单击 MovieClip 时会给出预期的“True”。

顺便说一句,我将很快转向基于类的方法,使用类型良好的变量和函数,但现在我坚持我所知道的;)

更新

奇怪,当我像这样修改 mcTest 中的第一行时:

var test;

或者像这样:

var test:Boolean;

代码按预期工作。似乎我不应该初始化我的变量(并且在编写良好的代码中,当然为此目的使用构造函数)

不过,我不明白为什么。如果我没记错的话,初始设置应该适用于旧版本的 Flash/Actionscript。

只是为了我的理解;如果有人知道发生了什么,请更新我。

4

1 回答 1

1

在 setTest 中,您声明了一个名为的新局部变量test,这就是它不保存的原因。

var test = false;

function setTest(){
    trace(test); //will return undefined

}

为什么?因为您的代码在影片剪辑中。代码在var test = false未添加到阶段时实际上并未执行(因为代码仅在执行帧时执行,这必须是在将其添加到阶段并且必须通过帧之后。

要进行测试,请在第 1 帧中使用:

var objTest:MovieClip = new mcTest();
addChild(objTest);
trace(objTest.test); //undefined

在第 2 帧中有这个:

trace(objTest.test);

结果将是undefined然后false

于 2013-08-11T09:02:05.247 回答