使用文本工具创建的动态文本和输入文本都是TextField类的实例,TextField类具有与MovieClip类相似的属性和方法,因此可以像对影片剪辑的实例一样动态地改变文本实例的显示特性。通过设置文本变量名的方法只能动态调用或改变文本中的内容,如果要使它们真正成为TextField类的实例,就必须在它们对应【属性】面板的“实例名称”文本框中为实例命名。
例如,将myTxt指定为一个动态文本的实例名称,于是可以使用下面的方法指定该文本所要显示的内容:
myTxt.text = "Hello World!";
其中,text是TextField类中表示文本内容的属性。如果该文本同时被指定以content作为变量名,那么下面的语句用来实现与上面相同的功能:
content = "Hello World!";
可见,文本变量名的作用仅仅相当于TextField类的text属性,然而将动态文本或输入文本创建成TextField类的实例将可以实现更多的功能。
使用MovieClip类的createTextField方法可以动态地创建TextField类的实例,如下所示:
my_mc.createTextField(instanceName, depth, x, y, width, height);
其中,instanceName指定文本的实例名称,depth指定实例的深度,x和y分别指定实例的x和y坐标,width和height分别指定实例的宽度和高度。
该方法创建的文本位于影片剪辑实例my_mc的内部时间轴中,其文本字段为空,但是可以方便地为其添加内容。
使用TextField类的removeTextField方法可以删除由createTextField方法创建的文本实例,其用法如下:
my_txt.removeTextField();
其中,my_txt是使用createTextField方法创建的文本字段的实例名。
操作练习
在主时间轴第1帧的【动作】面板中添加如下语句:
var i = 0; var count = 0; _root.onEnterFrame = function() { count++; count %= 5; if (count == 0) { _root.createTextField("txt"+i, i, 25+500*Math.random(), 0, 12, 12); with (_root["txt"+i]) { text = String.fromCharCode(Math.floor(26*Math.random())+65); autoSize = "center"; type = "dynamic"; textColor = 0x0000FF; border = true; borderColor = 0x999999; background = true; backgroundColor = 0xDDDDDD; } i++; } for (var j in _root) { _root[j]._y += 5; if (_root[j]._y>400) { _root[j].removeTextField(); } } }; _root.onKeyDown = function() { for (var j in _root) { if (_root[j].text == String.fromCharCode(Key.getCode())) { _root[j].text = "GOOD"; _root[j].textColor = 0xFF0000; _root[j].borderColor = 0xFF0000; _root[j].backgroundColor = 0xFFFF00; break; } } }; Key.addListener(_root); |
变量count用于设置延迟,即令每5次onEnterFrame事件执行1次创建文本实例的操作,在创建TextField类的实例之后立即设置各种属性。在设置text属性时使用了String类的fromCharCode方法,它将一个表示键控代码的整数值转换为对应的字符形式,这里刚好取A~Z之间的任一字符。由于TextField类没有onEnterFrame事件处理函数,因此在_root的onEnterFrame事件中令场景中的所有实例下落5像素,并且判断实例是否超出窗口下边界,如果是,则将其删除。
在_root的onKeyDown事件处理函数中,逐一判断场景中的文本实例,如果文本内容与按键相同,则将该文本设置为"GOOD",且同时更改文本实例的其他相关属性。这里,break命令发挥了很大的作用,它使得按一次键最多只能改变一个文本实例的内容,然后强制跳出循环。
这就是一个简单的打字游戏.