![游戏开发实战宝典](https://wfqqreader-1252317822.image.myqcloud.com/cover/212/44175212/b_44175212.jpg)
2.7 文本
Egret提供了三种文本类型:普通文本、输入文本以及位图文本,而且文本对象支持多种样式。
2.7.1 三种文本类型
首先创建一个称为“Text”的项目,将src文件夹内的文件全部删除,然后在其内部创建一个称为Main.ts的类文件,对其进行如下修改,参见二维码2-17:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_01.jpg?sign=1739916761-Ze5MGWUf9zjrDCNdjAHXimCtFKYQL47a-0-7a225d7577bc2990a485d5b7f0e4d4bf)
二维码2-17
运行调试播放器观看结果,如图2-37所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_02.jpg?sign=1739916761-WDeGkoZaYXcW8dhxWWHAHHvkGYRSnjvO-0-10d767bd1aa7bcf6393baf8718de581f)
图2-37 程序运行结果(普通文本)
在第13行,创建了一个TextField对象,在第14行,将它的text属性设置为"This is a text!",这个设置的结果会立即显示出来。
以上是普通文本的示例,接下来讲解一下输入文本。继续上一个项目,在Main类里继续添加如下的代码,参见二维码2-18:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_03.jpg?sign=1739916761-2JopHn3BZ5Qde9Uro8S5p0jXsJvaa42n-0-acc3969165fd294461e0a4b00cd8edbd)
二维码2-18
onAddToStage方法里也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_04.jpg?sign=1739916761-6cHvwaptf53y0oKDKzWtujMJfYq9tCfe-0-47004f452f032d927391e5385011c2f0)
运行调试播放器观看结果,如图2-38所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_05.jpg?sign=1739916761-AKx2HIBew8B0LILxfpY7kaEPSmG3AzP3-0-676d9d79035456e817043895e6dadb81)
图2-38 程序运行结果(输入文本)
在普通文本下面出现一个黑色的文本,单击这个黑色文本的后,就可以编辑这个文本,这个就是输入文本对象。输入文本对象与普通文本对象的区别就在于第3行代码:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_01.jpg?sign=1739916761-NAEQSbmoXcErLcPuI1Jki3nfJfWWVOZy-0-6dd5ffd89f83382e6bfa95096faf92b6)
这句代码可以把普通文本变为输入文本。
接下来讲解一下位图文本,继续之前的项目,在Main类中继续添加以下代码,参见二维码2-19:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_02.jpg?sign=1739916761-TSr8NaQFGukLOXM10e0tdvuTRe0M8j8t-0-6d54ad2ebf8ec5c8cac08a7d03e87356)
二维码2-19
onAddToStage方法也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_03.jpg?sign=1739916761-Zycfuw1RG4UWw86e7ilob4NGK2n3ZzFf-0-128d30dbcb5fa9d5175417ca69c7ed94)
运行项目之前要确保项目文件夹内的resource文件夹内有cartoon-font.fnt和cartoon-font.png两个文件。
运行调试播放器观看结果,如图2-39所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_04.jpg?sign=1739916761-qhKR8CTAIVZiIobK5KDTg9lF3DXJb3CP-0-7e86ad5df90df64b8174372e14ab7905)
图2-39 程序运行结果(位图文本)
在onAddToStage方法里添加的方法涉及了Egret的资源加载功能,这个知识点将会在下一章介绍,这里只需要了解这些代码的功能就是加载了资源的配置文件,并在随后加载了资源即可。
在位图文本中第一个代码清单的第10行,创建了一个new egret.BitmapText类的对象,该类的用法和egret.TextField类的用法相似,只不过前者可以使用自定义的位图字体,而且字体也是通过font(代码第11行)属性指定的,但是该属性的类型是BitmapFont,而不是字符串。
2.7.2 文本样式
开发者可以使用文本样式来指定文字的外观。本节将介绍几种常见的文本样式属性。
(1)字体、字号、颜色、描边以及加粗与斜体
创建一个称为“TextStyle”的新项目,删除src文件夹内的所有文件,然后创建一个称为Main.ts的类文件,然后做出如下修改,参见二维码2-20:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_01.jpg?sign=1739916761-75k1pcPwKpScCqD8OcdZFsrVNrkc1Hjn-0-0f9cfd97891e7706de59d75aa4092cf3)
二维码2-20
运行调试播放器观看结果,如图2-40所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_02.jpg?sign=1739916761-i8mMUAiEr8ZcumnCuXyg3Juo0x42YaUw-0-7ec264bc0cdfd52ba4c596ab8f1c5337)
图2-40 程序运行结果(设置字体)
可以看到,把文字的字体设置为“Impact”了。
在代码的第13行,通过TextField对象的fontFamily属性来改变字体。接下来改变一下字号。继续上一个项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_03.jpg?sign=1739916761-tYywcyWqAnuBmE82OZA3Mt8IqJT1c5z2-0-2f840f8d419f6ea133f5eaa8e9212061)
启动调试播放器观看结果,如图2-41所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_04.jpg?sign=1739916761-tkwF1KANdkDMk6ipSibZWdSwQk49qPwq-0-9987dd85e223bd4aa470a7f6572c5a7f)
图2-41 程序运行结果(设置字号)
文字明显变大了。在代码的第4 行,把文本的宽度加大了,否则如果增大字号会裁剪文本。代码的第8行,通过size属性,将字号设为50。
接下来看一下文本的颜色。继续之前的项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_05.jpg?sign=1739916761-PCLQCdY2h9hTxd5nh4o2cjatpIhHwew0-0-32ac589874cbd25776916fd56c39ce90)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_01.jpg?sign=1739916761-UNyYaGeXuLqV0edenV4EanpXVIrmYQTq-0-b34b155926aa36ea7aa3115599eb40aa)
运行调试播放器观看结果,如图2-42所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_02.jpg?sign=1739916761-hftdsxr6DA4PRucINhvPBB4shdUuzm6T-0-da2f65823264a56b5449f48358305c2d)
图2-42 程序运行结果(设置颜色)
文字变成红色的了。这是因为在代码第9行,将属性textColor设置为0xff0000,这个16进制数字就是红色的颜色值。
接下来看一下描边效果。继续上一个项目,对其做出如下修改,参见二维码2-21:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_03.jpg?sign=1739916761-tJ7RcEotVVPXbnFN3i4srbQl0eq1NVnO-0-3a2259efc7116290eeb93553f105d688)
二维码2-21
运行调试播放器观看结果,如图2-43所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_04.jpg?sign=1739916761-12AvirexYlTkMK3VjcZ5OtpkPasEZGqQ-0-d3b7d0d00d477f8891476a59f15f0791)
图2-43 程序运行结果(设置描边)
文字加上可蓝色的描边。这是因为在代码第10 行,通过 strokeColor属性来指定描边颜色。在第11行,通过stroke属性来指定描边的宽度。
接下来看一下加粗和斜体效果。继续上一个项目,对其做出如下修改,参见二维码2-22:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_05.jpg?sign=1739916761-yDEnD501yUlnmga3F16VBxdcdGo4LArO-0-af9c9f4f1683ee28c12c53868703b6bd)
二维码2-22
启动调试播放器观看结果,如图2-44所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_06.jpg?sign=1739916761-PwwfjjaEqcEkD8OHrh15qFazR2yc0ADq-0-587a7ec593e91eae4381919e1621e72e)
图2-44 程序运行结果(设置加粗和斜体)
文字变成粗体并倾斜了。这是因为代码的第12行,通过将bold属性设置为true来将其变成粗体。代码的第13行,通过将italic属性设置为true来将其变成斜体。
(2)混合样式
接下来介绍一下混合样式,通过这种方式可以创造富文本。可以通过两种方式来设置混合样式,一种是JSON方式,另一种是HTML方式。继续上一个项目,对其做出如下修改,参见二维码2-23:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_07.jpg?sign=1739916761-4CKiMYMhfj4rumPTatdmtsOQ89WM2s8b-0-c210afca1ec2c94c5c861790f205a59b)
二维码2-23
把之前的功能提取到一个称为drawText的方法里。运行调试播放器观看结果,如图2-45所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_01.jpg?sign=1739916761-d8jWCZz99BixPwf3vpV64JgGmi1OzkV1-0-e2d73548a25dfea53e1aedfacb7ccb97)
图2-45 程序运行结果(JSON混合样式)
丰富混合文本是由ITextElement类型的对象组成的,ITextElement是这样定义的:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_02.jpg?sign=1739916761-h4ZNHBYLJ6xa32TB7V78FYlJuy2N7ORZ-0-a95dd8cf42ee27a447ab99c8da511a42)
其中ITextStyle对象就是各种样式属性的集合。比如第33行的代码格式化之后如下所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_03.jpg?sign=1739916761-AOB4rHyONvABUU96Ko5zhRJB0EYbhK3a-0-5c581db5985d65465989cfb4cbaf744d)
这个对象的类型就是ITextElement的,其中的style对象为:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_04.jpg?sign=1739916761-eQsxFxYEeZx59x35O3DKt4eocukdTWXK-0-cb1688de050573a744dcbf22f9aa90b6)
它的类型为ITextStyle。
接下来介绍一下HTML的方式。继续之前的项目,在Main类里继续添加如下的方法,参见二维码2-24:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_05.jpg?sign=1739916761-86xgMWD2vPqA0e6BpXkXAeYi1xnzobA7-0-11343dc7e124753c019ea7db13cd64db)
二维码2-24
相应地,onAddToStage也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_06.jpg?sign=1739916761-M5DJ837cQdE0ubAbi80Qq7E6KqllOCit-0-3a27bea767329905574e96eb40d10b73)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_01.jpg?sign=1739916761-IzjZq7iQA7CgYztTPzfFWun4ipBHAibB-0-6b9296a577663b7c8aa9cf3a97ea4d30)
运行调试播放器观看结果,如图2-46所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_02.jpg?sign=1739916761-D8kViX6hfUdemVZYQ89ohGL3A9vU76eN-0-8637b77fbde1b99b28c47c42439ecbeb)
图2-46 程序运行结果(HTML混合样式)
这次绘制出了和JSON方式等价的混合文本。接下来介绍一下文本布局。
(3)文本布局
继续之前的项目,在Main类的内部继续添加以下的方法:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_03.jpg?sign=1739916761-tyhVZszeisSVKgIa8ZgXWoltDHr5Kioh-0-a3e520d1069423fb807db6fcbdec90d0)
相应地对onAddToStage方法做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_04.jpg?sign=1739916761-fyKV1O4PDUxlaCIH1mw7DifhZUluwMt7-0-b155d396707934b632628012cc97ab86)
运行调试播放器观看效果,如图2-47所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_01.jpg?sign=1739916761-FsmZM7BPCWecePcUIaT3d0nOCtUcvMs8-0-1604326bb3c8f55e50902a322275d4ec)
图2-47 程序运行结果(文本布局)
在drawTextLayout方法的第8行,通过将border属性设置为true,从而让文本对象显示边框,这样就能看懂它的布局方式了。第9 行,通过将 borderColor属性设置为0x000000,从而将边框的颜色设置为黑色,这样就能看清边框了。
接下来介绍一下水平布局。对drawTextLayout 方法做出如下修改,参见二维码2-25:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_02.jpg?sign=1739916761-gXlbsG7tMWiBtNxv83rMtJzBvVXcgX1v-0-df4d1cfabae5a484131f0b36ebecc6f0)
二维码2-25
运行调试播放器观看结果,如图2-48所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_03.jpg?sign=1739916761-IeSDfraafzG9OvfGjdJgFaJqWo60qNn6-0-1c6e1db8064863ffb199170f36ad6f67)
图2-48 程序运行结果(水平布局)
从图2-48可以看出文本对象对齐到边框的右侧了。
在代码的第10 行,通过设置textAlign 属性来指定文本的对齐方式,这种对齐方式是相对文本对象的边框的。这个属性是个字符串,而且Egret自带了该属性有效值的常量,egret.HorizontalAlign.RIGHT就是其中的一个。
课后作业:考虑一下,如何实现水平居中对齐。
接下来介绍一下纵向布局。对drawTextLayout方法做出如下修改,参见二维码2-26:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_01.jpg?sign=1739916761-yN6icuybXZbU9aa1k6oMxgSLfpXlyJ4t-0-3a191ba0015fba350a0d46ac1d9731df)
二维码2-26
运行调试播放器观看结果,如图2-49所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_02.jpg?sign=1739916761-IV68QENO9vLIVKb0YbSRb6VinuQatMZQ-0-bff0313909cc219917b8ed7bcbef0934)
图2-49 程序运行结果(纵向布局)
从图中可以看出,文本移到左下角了。
在上面代码的第11行,通过指定verticalAlign属性来设置文本对象的垂直布局方式,跟textAlign一样,它的值也是一个字符串。而且egret.VerticalAlign.BOTTOM也是Egret自带的字符串常量。
课后作业:试将文本垂直居中显示。
(4)文本超链接事件
TextField对象可以响应Touch事件,也就是说,当单击文本对象的时候,可以指定触发代码。继续上一个项目,在Main类里继续添加以下代码,参见二维码2-27:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_03.jpg?sign=1739916761-sxnN3QaXk3MyT9vPLTbVxTVGghcDf1RA-0-afe6674a12c91580fb3ea434a778d97b)
二维码2-27
onAddToStage方法也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_04.jpg?sign=1739916761-KLX0MtANE0MenYdTWwzOeOzg4sASHwGg-0-d181f78be89e0de3e637bd0b44a0e394)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_01.jpg?sign=1739916761-xBNBMyWUuDsUAnjT08nnTJATfeeNlpHp-0-526da4accc07a4a12bbb46fbd63f6496)
运行调试播放器观看结果,如图2-50所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_02.jpg?sign=1739916761-PyhwVHYJFRUamNil9vHGfNQy5JIp8Wr8-0-a91e4489a98a6eb6bc24a18abe9b5d65)
图2-50 程序运行结果(文本超链接)
当单击第一行文字的时候,EgretWing的调试窗口会输出“text event triggered”。单击第2行文字不会有任何效果。