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
相关产品推荐
相关产品推荐

