![游戏开发实战宝典](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=1739287564-5bhKH2vrzBXzsTEd0waREHs1k2qqcylK-0-e7898b105d1907bbd9705efcb7b93cf9)
二维码2-17
运行调试播放器观看结果,如图2-37所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_02.jpg?sign=1739287564-6xDKF9RF3Bf1Bgf9wrHcIXCbYBlii7Qr-0-5bf14a0c0525ff50a09204a225a5edad)
图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=1739287564-FvOUVYpsBeTXWWjJ3DbtXJ8FAresu3RS-0-7d5928a26daa1a76b3458470d3a69826)
二维码2-18
onAddToStage方法里也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_04.jpg?sign=1739287564-AkoBqsaoD1NqRYumCE8rUXwlsFBtBTro-0-37480f6240d07d7f6ce00d7759bed52f)
运行调试播放器观看结果,如图2-38所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_05.jpg?sign=1739287564-5pLtEoggP5UVWxYm6G4MBpfwrTAuj2fa-0-9c8aaa61efbee1f67ad3fee486f3e84f)
图2-38 程序运行结果(输入文本)
在普通文本下面出现一个黑色的文本,单击这个黑色文本的后,就可以编辑这个文本,这个就是输入文本对象。输入文本对象与普通文本对象的区别就在于第3行代码:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_01.jpg?sign=1739287564-nwibG3VGYvCIIowF1pV6jTE6QPXmyDoS-0-b11ac0b436c6ea8146246c81b4133549)
这句代码可以把普通文本变为输入文本。
接下来讲解一下位图文本,继续之前的项目,在Main类中继续添加以下代码,参见二维码2-19:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_02.jpg?sign=1739287564-ESaenX68AzJ5r1RVkpcvAlmRq1eWFr2E-0-872f13cb0957b296b9abb4ee6f8cfc47)
二维码2-19
onAddToStage方法也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_03.jpg?sign=1739287564-7ybDcdWb4Koo3MvzTqJSXFhdEV7NPN3c-0-6f5e0c8cf7406c8fea879f6622ea57be)
运行项目之前要确保项目文件夹内的resource文件夹内有cartoon-font.fnt和cartoon-font.png两个文件。
运行调试播放器观看结果,如图2-39所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_04.jpg?sign=1739287564-pMmCKi11rpahFKXein739mcGoVH1H7Xk-0-44834e55e74a3335c4408d36069264d5)
图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=1739287564-4BAH2Lv3BJkzbQ0XTOpFhDko7Um5OKKJ-0-a1be5b356643216614cc301cfd01a1dd)
二维码2-20
运行调试播放器观看结果,如图2-40所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_02.jpg?sign=1739287564-inECc9pFPBxo5MAG5SDjSq15DWGdNmEJ-0-e19a1da74874c2ce4f967aa4d00a08fa)
图2-40 程序运行结果(设置字体)
可以看到,把文字的字体设置为“Impact”了。
在代码的第13行,通过TextField对象的fontFamily属性来改变字体。接下来改变一下字号。继续上一个项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_03.jpg?sign=1739287564-qwJnvTG9bdA4je57vI4mjyIKF7n7rPbl-0-7b37d1be96a5e549efa6fb025f68e1a2)
启动调试播放器观看结果,如图2-41所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_04.jpg?sign=1739287564-9pBQP3uT63dCDQRPwLI9SZLLIb7Rithe-0-8e851f21719b36cd0a828079a5fe48a9)
图2-41 程序运行结果(设置字号)
文字明显变大了。在代码的第4 行,把文本的宽度加大了,否则如果增大字号会裁剪文本。代码的第8行,通过size属性,将字号设为50。
接下来看一下文本的颜色。继续之前的项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_05.jpg?sign=1739287564-aKjYwww69uWeiugxwwKUvDVVAm1ShPfX-0-8498a78df65799f1452fff76ff79e9a1)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_01.jpg?sign=1739287564-fgHgVWApbogvfvEg6HoHlkxTvOIdVWQF-0-f89b0bbd1e90a1d37fabbed17c1748ed)
运行调试播放器观看结果,如图2-42所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_02.jpg?sign=1739287564-tVfzgYm03aVJthp4iJp77LBpFmDLLYT4-0-a399c7e230ccabaf4303658717b212a6)
图2-42 程序运行结果(设置颜色)
文字变成红色的了。这是因为在代码第9行,将属性textColor设置为0xff0000,这个16进制数字就是红色的颜色值。
接下来看一下描边效果。继续上一个项目,对其做出如下修改,参见二维码2-21:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_03.jpg?sign=1739287564-b4SJDLD6qnad3Tma0aB5VtiiYAjOkkCw-0-6649349cd8f78376d9094436b954bcf3)
二维码2-21
运行调试播放器观看结果,如图2-43所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_04.jpg?sign=1739287564-S60j3DgdeISfJlnbFZzRlKwxCcx2demr-0-900d0aa6656e4c694a0834478ccb0210)
图2-43 程序运行结果(设置描边)
文字加上可蓝色的描边。这是因为在代码第10 行,通过 strokeColor属性来指定描边颜色。在第11行,通过stroke属性来指定描边的宽度。
接下来看一下加粗和斜体效果。继续上一个项目,对其做出如下修改,参见二维码2-22:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_05.jpg?sign=1739287564-geEmIYIaRmq4EZv0G5zRcHtAEKjjBXjh-0-da3bcd8a78391b278b37774a34b0eaf5)
二维码2-22
启动调试播放器观看结果,如图2-44所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_06.jpg?sign=1739287564-NwNKno0SaE18PdqkwaXJbkcO6q1FepCH-0-4ce046c6775c369ebaff23e65c670e60)
图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=1739287564-G3TCJJVNTWjRpHVYyQfFCtKokDBzCA8E-0-c5e05b6f7e165e5a356a2f4ccdf0f30a)
二维码2-23
把之前的功能提取到一个称为drawText的方法里。运行调试播放器观看结果,如图2-45所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_01.jpg?sign=1739287564-tI3FiS1E01hEmU4sYosdwBQtYGPZgVr2-0-aebc1095c1e4d4cf0fb17df527bd4c82)
图2-45 程序运行结果(JSON混合样式)
丰富混合文本是由ITextElement类型的对象组成的,ITextElement是这样定义的:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_02.jpg?sign=1739287564-2BNj41Qyfe7OfVgcftTkz8LlFvSFG1tv-0-ab01a9a661baa8afc6c4ddf637bca005)
其中ITextStyle对象就是各种样式属性的集合。比如第33行的代码格式化之后如下所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_03.jpg?sign=1739287564-UMGf2SEFt0GQSwPzBEKQB14P7XX6DcLb-0-0eb00e9e4ecb3ffc3392d9fd042b268f)
这个对象的类型就是ITextElement的,其中的style对象为:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_04.jpg?sign=1739287564-pDBiHUYDgMmwwQoSwx2JWJaT2Pls5Tql-0-9d1da1067f0a8be427fa0b1dfed76fe7)
它的类型为ITextStyle。
接下来介绍一下HTML的方式。继续之前的项目,在Main类里继续添加如下的方法,参见二维码2-24:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_05.jpg?sign=1739287564-DtYLE2m9HxaSLfVGd9uafC9tsmgYhfaC-0-9d9859abbd960b268ecebdc0f014c3ab)
二维码2-24
相应地,onAddToStage也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_06.jpg?sign=1739287564-atDbTcA59KEJkXuju6rsMGzNegr7UyDr-0-5dfade84125776c7ce9af74c23c483e3)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_01.jpg?sign=1739287564-QyzIMTG96Why5sz0egxTCBCthw6l3NEK-0-211fc13200855d55197df1a55956ced6)
运行调试播放器观看结果,如图2-46所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_02.jpg?sign=1739287564-bM3HsmBzODuulp6Qn6SvRn5YGCVomHSw-0-f114aa11b5d5434fac365f2aed135652)
图2-46 程序运行结果(HTML混合样式)
这次绘制出了和JSON方式等价的混合文本。接下来介绍一下文本布局。
(3)文本布局
继续之前的项目,在Main类的内部继续添加以下的方法:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_03.jpg?sign=1739287564-5iXuVOpi89kcVNDeb35LO0BuiAw1iHmf-0-f65e415cf280fcec24528ed7c16fd085)
相应地对onAddToStage方法做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_04.jpg?sign=1739287564-TTXL7dyLaR5SLVzCqh6jwoQ7b5Oc3k11-0-247e200d2c7edcb03b573081e2dd2351)
运行调试播放器观看效果,如图2-47所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_01.jpg?sign=1739287564-4pUHmX5Ca0baag2AI0TvEfMwFmuW8P5A-0-313248fc1c5dcfece65871ee8efa410b)
图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=1739287564-Baqu1y9N4O4Y8dsf1SzoAY0pkrTdXWDK-0-01f705ed8a39b2b4f65b788110e9a4df)
二维码2-25
运行调试播放器观看结果,如图2-48所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_03.jpg?sign=1739287564-qiIATfPhE41M7t8OkGUsrj6SBchRcMgk-0-0ec41c26450733138e13ebf5a6825b67)
图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=1739287564-1FbWotluVp0ditYkTa6iUK4nDyv6R2ee-0-1731790c2de30a03ff0053f11b7262f1)
二维码2-26
运行调试播放器观看结果,如图2-49所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_02.jpg?sign=1739287564-QIpyCE4ubgWMGGHM31pYA5ejKPiSoLT1-0-7a41d77b8d6f70635a5d43b387f579ee)
图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=1739287564-slYc5O6QX6jAjawQLw7uboZqrqme159X-0-4417105a6135a501f60a4035be626d0f)
二维码2-27
onAddToStage方法也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_04.jpg?sign=1739287564-ef3JJOudTBzfxMKNa8IMaISQvSg0RHLE-0-d9e8d2ddfb7a4d28ee1c7a3227b23200)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_01.jpg?sign=1739287564-SEHka6CzOseOBnEsT2Yk2bFZ99h501Ak-0-0951e9d75518c6b1dc2a5d98604f28df)
运行调试播放器观看结果,如图2-50所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_02.jpg?sign=1739287564-XCkaHyQSXubUSDr3GJR6gTwOLLMUA2Dd-0-298d81b128039df19a69ddf17355f6c6)
图2-50 程序运行结果(文本超链接)
当单击第一行文字的时候,EgretWing的调试窗口会输出“text event triggered”。单击第2行文字不会有任何效果。