You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActionScript 2.0中ChangeColorText变量存为undefined的问题解决

Flash CS6 AS2 聊天系统.sol共享对象中ChangeColorText显示undefined的解决办法

我用Flash CS6基于ActionScript 2.0搭建了在线聊天系统,其余功能均正常,但.sol共享对象文件里的ChangeColorText变量始终显示undefined。试了两段存储代码都没解决,最后发现是变量作用域路径错误,把变量改成_root.ChangeColorText就搞定了。

第一段尝试的代码(存在路径问题)

这段代码直接引用ChangeColorText,因作用域限制无法获取根时间轴上的文本框值:

// 鼠标左键释放时触发动作:
on (release) {
    if (UserName eq "") {
        _root.LiveChat.Status = "Please enter a user name.";
    } else if (Message eq "") {
        _root.LiveChat.Status = "Please enter a valid message.";
    } else {
        // 在Flash CS6共享对象目录创建共享对象:       
        var so:SharedObject = SharedObject.getLocal("Chat.txt.sol");

        // 将三个文本框(UserName、Message、ChangeColorText)的新输入数据以HTML格式存入.sol文件:         
        so.data.User = "\r\n" + "<font color=" + ChangeColorText + ">" + UserName + ":</font> " + Message + " " + "<font color=" + "'#B4B65A'" + "><font size=" + "'13'" + ">" + "Posted: " + new Date + "</font></font>";
        so.flush();
    }
}
// 以上代码除了ChangeColorText在.sol文件中显示undefined外,其余功能正常。

第二段尝试的代码(存在多处错误)

这段代码不仅没解决路径问题,还错误声明了同名变量,且文件操作逻辑不符合AS2规范:

// 我还试过这段代码,想把变量数据存入.fla和.swf同目录的Chat.txt文件,但没用:
on (release) {
    if (UserName eq "") {
        _root.LiveChat.Status = "Please enter a user name.";
    } else if (Message eq "") {
        _root.LiveChat.Status = "Please enter a valid message.";
    } else {
        var UserName:String;
        var Message:String;
        var ChangeColorText:String;     
        var fileRef:String;
        textToSave = UserName +"\n" + Message +"\n" + ChangeColorText;
        fileRef = new String();
        fileRef.String(textToSave,"Chat.txt");
        so.flush();
    }
}

解决核心问题

ChangeColorText是根时间轴上的文本框实例,但代码写在按钮的on(release)事件内部,直接写变量名会在按钮的局部作用域查找,自然找不到对应值,所以显示undefined。只要给变量加上_root.前缀,就能正确访问到根时间轴上的实例。

修正后的可用代码

on (release) {
    if (_root.UserName eq "") {
        _root.LiveChat.Status = "Please enter a user name.";
    } else if (_root.Message eq "") {
        _root.LiveChat.Status = "Please enter a valid message.";
    } else {
        var so:SharedObject = SharedObject.getLocal("Chat.txt.sol");
        // 给所有根时间轴变量加上_root前缀,确保作用域正确
        so.data.User = "\r\n" + "<font color=" + _root.ChangeColorText + ">" + _root.UserName + ":</font> " + _root.Message + " " + "<font color=\"#B4B65A\"><font size=\"13\">Posted: " + new Date + "</font></font>";
        so.flush();
    }
}

内容的提问来源于stack exchange,提问作者TypicalProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:54:51