多年来我没有接触过 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。
只是为了我的理解;如果有人知道发生了什么,请更新我。