Flash中的文本形式有3种,即静态文本、动态文本和输入文本。输入文本可以接受用户输入,这也是响应键盘事件的一种。输入文本是一种人机交互工具,输入文本作为变量可以被ActionScript识别。
有许多方法可以操纵String(字符串)对象,如使用运算符“+”连接字符串,使用substring和substr函数从目标字符串中截取子字符串,使用indexOf函数确定匹配字符串在目标字符串中的位置等。
9.1 输入文本
Flash中的文本形式有3种,即静态文本、动态文本和输入文本。输入文本可以接受用户输入,这也是响应键盘事件的一种。
3种形式的文本都是由文本工具
创建的,要创建输入文本,首先要使用文本工具绘制一个文本框,然后在属性面板中将该文本框的类型设置成输入文本
在输入文本的属性面板中,除可以设置一般的文本格式外,还可以单击 按钮将文本显示为HTML格式,单击
按钮为文本添加边框,在 后面的下拉列表框中设置文本的换行格式或将文本设置成密码显示。
输入文本最重要的是变量名,如图9-2所示中的“变量”文本框,其中的myInputText即是该输入文本的变量名。输入文本变量和其他变量类似,变量的值会呈现在输入文本框中,输入文本框中的值同时也作为输入文本变量的值,它们之间是等价的。
如在场景中绘制了一个变量名为myInputText的输入文本框,然后在主时间轴的帧动作面板中添加如下ActionScript:
Key.addListener(_root);
_root.onKeyDown = function() {
trace(_root.myInputText);
};
以上脚本创建一个键盘侦听器,当按下键时即将输入文本myInputText中的内容显示在输出窗口中。测试一下您可以看到,输出窗口不会漏掉输入的每个字符,并且每输入一个字符即输出一行。
9.2 字符串
字符串是一种特殊类型的数据,对字符串可以进行多种操作。
9.2.1 连接字符串
要连接两个字符串,可以使用“+”运算符。如下所示:
var myString = "Hello";
myString += " World.";
trace(myString);
输出窗口中将输出如下所示的字符串:
Hello World.
您可以在一行ActionScript中使用多个“+”运算符,如下所示:
myStr1 = "How";
myStr2 = "are";
myStr3 = "you";
myStr = myStr1+" "+myStr2+" "+myStr3+"?";
trace(myStr);
输出窗口中将输出如下所示的字符串:
How are you?
9.2.2 截取字符串
从字符串中可以截取它的子字符串。例如,下面的脚本从字符串中截取第5到第14个字符组成的子字符串:
myString = "ActionScript is so useful!";
childStr = myString.substring(4, 14);
trace(childStr);
截取字符串函数substring有两个参数,第一个参数表示要截取的字符串的开始位置,第2个参数表示要截取的字符串的结束位置。
输出窗口中输出如下所示的子字符串:
onScript i
我们要截取的子字符串是从第5个开始,为什么substring的参数中要从4开始呢?这是因为在ActionScript中,通常是从0开始计数的,即上面的字符串中第0位上是A,第1位上是c,以此类推。那么既然从0开始计数,第14个字符就应该是第13位,为什么第2个参数不是13而是14呢?这是因为substring的第2个参数是指要截取到的位置,即要截取的最后一个字符是它前面的一个字符,所以它应该比要截取的最后一个字符多一位。
还有一种方法可以截取字符串,这就是substr。substr与substring命令的区别在于substr的第2个参数代表要截取的子字符串的长度。如下所示的ActionScript实现与前例相同的效果:
myString = "ActionScript is so useful!";
childStr = myString.substr(4, 10);
trace(childStr);
在输出窗口中输出子字符串:
onScript I
还有一个特殊的截取字符串的命令charAt。charAt可以从字符串的指定位置截取一个字符,如要从前面的字符串中截取第6位上的字符S,可以使用如下所示的ActionScript:
myString = "ActionScript is so useful!";
childStr = myString.charAt(6);
trace(childStr);
输出窗口中将输出字符S。
9.2.3 字符串函数
String对象有很多内置函数,使您可以对字符串进行各种操作。
indexOf方法用于从目标字符串中查找另一字符串的索引,即与另一字符串相匹配的子字符串的起始位置。如下所示:
myString = "Macromedia Flash MX";
myStr = myString.indexOf("Flash", 0);
trace(myStr);
以上脚本从目标字符串“Macromedia Flash
MX”中查找字符串“Flash”的位置,运行该脚本,输出窗口中输出11。
如果目标字符串中没有找到相匹配的字符串,将返回-1。
indexOf的第2个参数表示从目标字符串中开始查找的起始位置,前例中的0表示从目标字符串的第1个字符开始查找。该参数可以省略,将默认从第1个字符开始查找。
与indexOf函数相对的是lastindexOf,用它查找在参数所指定的开始位置之前的最后一个子字符串的索引,即逆序查找。如下所示:
myString = "Macromedia Flash MX";
myStr = myString.lastindexOf("a", 12);
trace(myStr);
运行该脚本,输出窗口中输出9。
如果将参数12改成13或更大的数,或将该参数省略,将返回结果13。
String对象的toLowerCase函数实现将大写字母转换为小写形式,toUpperCase函数实现将小写字母转换为大写形式。如下所示:
myString = "Macromedia Flash MX";
myStr1 = myString.toLowerCase();
myStr2 = myString.toUpperCase();
trace("Original String : "+myString);
trace("LowerCase String : "+myStr1);
trace("UpperCase String : "+myStr2);
运行该脚本,输出窗口中显示:
Original String : Macromedia Flash MX
LowerCase String : macromedia flash mx
UpperCase String : MACROMEDIA FLASH MX
String对象只有一个属性,即length,它表示字符串的长度,即字符串中包含字符串的个数,如下所示:
myString = "Macromedia Flash MX";
trace(myString.length);
运行该脚本,输出窗口中显示19,即该字符串中共19个字符。
在使用String对象的函数和属性时要注意,字母的大写形式和小写形式是有区别的,并且每个空格也作为一个字符。
9.3 练习:表单
表单(form)在网页中使用得非常频繁,用户可以通过表单与服务器进行交互,从而实现注册或登录等操作。
借助于输入文本、按钮以及ActionScript等,也可以用Flash来制作网页中的表单。
第1个输入文本框采用单行格式,第2个输入文本框采用密码格式,第3个输入文本框采用多行格式,并设置了30像素的缩进。3个输入文本变量名分别为name、paword和words,使用ActionScript分别控制3个文本框中的最大字符数。当单击按钮Clear时,清除3个文本框中的内容,当单击按钮Submit时,提交所填的内容。因为这里还没学到Flash与服务器的交互,所以将用户所填内容通过输出窗口显示出来。
打开文件form.fla,分别查看一下3个输入文本框的属性面板中的设置。
在主场景中新建一层Actions,打开其动作面板,其中添加了如下ActionScript:
Key.addListener(_root);
_root.onKeyUp = function() {
if (_root.name.length>8) {
_root.name = _root.name.substr(0, 8);
}
if (_root.paword.length>16) {
_root.paword = _root.paword.substr(0, 16);
}
if (_root.words.length>150) {
_root.words = _root.words.substr(0, 150);
}
};
以上脚本控制3个文本框中的最大字符数,当在文本框中输入的字符数超过了限制,则使用substr函数从输入的字符串中截取指定长度的字符串。
选中按钮Clear,打开其动作面板,其中添加了如下ActionScript:
on (release) {
_root.name = "";
_root.paword = "";
_root.words = "";
}
选中按钮Submit,打开其动作面板,其中添加了如下ActionScript:
on (release) {
trace("Welcome "+_root.name+" !");
trace("Your password is "+_root.paword+" .");