![游戏开发实战宝典](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=1739295012-PpFnliDsLA9s07TKR7WFjTNdQ4n2EW5A-0-0fdb07d6c150878103483c3dac040462)
二维码2-17
运行调试播放器观看结果,如图2-37所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_02.jpg?sign=1739295012-p9uJm3jLyHSMmPaomOAvJB7Qf7dr45fM-0-b2b57ba00200a5e5390233739047c334)
图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=1739295012-fdxJ3OqJRhLPX2qpgR5jbJ23tNg7lbGh-0-98dfdc4174eca2bea7dfc9b977fb4a09)
二维码2-18
onAddToStage方法里也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_04.jpg?sign=1739295012-g80PX1KnAABSogu0N1Oe1pOPxxIHaIfJ-0-58daec276079c1617401fde26b9ecc03)
运行调试播放器观看结果,如图2-38所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_05.jpg?sign=1739295012-EilXWI5HglRqhS0ezta1FljpkBcxGmpv-0-10da38adf652ace1eae3a2f6dcd6c59a)
图2-38 程序运行结果(输入文本)
在普通文本下面出现一个黑色的文本,单击这个黑色文本的后,就可以编辑这个文本,这个就是输入文本对象。输入文本对象与普通文本对象的区别就在于第3行代码:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_01.jpg?sign=1739295012-cgYBy6l3JYdvVCuTQgbLcr8ZbjKU2oEM-0-3f95e609c714c990dfe0e2dc85f85398)
这句代码可以把普通文本变为输入文本。
接下来讲解一下位图文本,继续之前的项目,在Main类中继续添加以下代码,参见二维码2-19:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_02.jpg?sign=1739295012-bd5ZzwWnGJ4QL3Q5kQOCFgfO4GtSicY9-0-292c74918eb6b91b0d0534320b444e12)
二维码2-19
onAddToStage方法也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_03.jpg?sign=1739295012-XMcLn6DsKAv0Byx8IcXPJz84eSZiKt9X-0-052f0edfc085e91dd304b327e07d4fac)
运行项目之前要确保项目文件夹内的resource文件夹内有cartoon-font.fnt和cartoon-font.png两个文件。
运行调试播放器观看结果,如图2-39所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_04.jpg?sign=1739295012-aZMd5yhEpyWTNvrBuTDhyA5BwJYmm2aE-0-d3f25155710a296141bdd6e50c8aefdd)
图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=1739295012-dwWtRZ68MnO2KlbF2vvSUwv4LLP8CdlK-0-c778676bb70de1982c16dae58ddf3e35)
二维码2-20
运行调试播放器观看结果,如图2-40所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_02.jpg?sign=1739295012-uRLQEh5NO9uovbIEsrev9MFB57p5T5Up-0-a805947e7d7dbb7a3b5f5fb25d1f46cf)
图2-40 程序运行结果(设置字体)
可以看到,把文字的字体设置为“Impact”了。
在代码的第13行,通过TextField对象的fontFamily属性来改变字体。接下来改变一下字号。继续上一个项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_03.jpg?sign=1739295012-IK9pFsXyg7W75759BrpNSNjmOgwM07di-0-d22548adeb3a7ec6c06cd94c23ebd9bc)
启动调试播放器观看结果,如图2-41所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_04.jpg?sign=1739295012-blw3zu6Tqri8D5UJY2Fm5iiKd768Iqhq-0-bcb4cf46a98ae4c61c915915871ff33c)
图2-41 程序运行结果(设置字号)
文字明显变大了。在代码的第4 行,把文本的宽度加大了,否则如果增大字号会裁剪文本。代码的第8行,通过size属性,将字号设为50。
接下来看一下文本的颜色。继续之前的项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_05.jpg?sign=1739295012-ncGKCnkTtU52SDiaQlCAnGNAZ3WNgFXf-0-634526047941fb112435a97912cc3fd1)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_01.jpg?sign=1739295012-XEXN8CKKRXqefnnGntKZabFaz7YmL9Wj-0-f92f8472356df38c50b1d064562ca354)
运行调试播放器观看结果,如图2-42所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_02.jpg?sign=1739295012-ehgraqIAdrziQOTFLeBeh4Qo1sIUhDo8-0-1c78607f8a1b8647351804bdd2958234)
图2-42 程序运行结果(设置颜色)
文字变成红色的了。这是因为在代码第9行,将属性textColor设置为0xff0000,这个16进制数字就是红色的颜色值。
接下来看一下描边效果。继续上一个项目,对其做出如下修改,参见二维码2-21:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_03.jpg?sign=1739295012-yleSOqoyBhiFieIZ4x8H0kLjbjtLYD0X-0-0fedec09b9cfc5838c505077d7d5e30a)
二维码2-21
运行调试播放器观看结果,如图2-43所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_04.jpg?sign=1739295012-cc6jp4AAJI2nwn97FPXtyHWKuRPYl3LZ-0-c127b217bb7c8e700e815ea5a4a8cb2d)
图2-43 程序运行结果(设置描边)
文字加上可蓝色的描边。这是因为在代码第10 行,通过 strokeColor属性来指定描边颜色。在第11行,通过stroke属性来指定描边的宽度。
接下来看一下加粗和斜体效果。继续上一个项目,对其做出如下修改,参见二维码2-22:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_05.jpg?sign=1739295012-IXxMSThdXgkOOOXWEGawrx85HrxHrv9s-0-756bb7deec8280684c0db32c44b9872f)
二维码2-22
启动调试播放器观看结果,如图2-44所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_06.jpg?sign=1739295012-mvnKg35iFD9KUokIu0n4YqZutZ169Muw-0-b3cad10518c804c13646760facaa1ec1)
图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=1739295012-A7UKvale4XzwPXXWkbcFW0S55aDmwk0d-0-4d45bed2e4f5a04eaea09e1907310d50)
二维码2-23
把之前的功能提取到一个称为drawText的方法里。运行调试播放器观看结果,如图2-45所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_01.jpg?sign=1739295012-h6xvxdRKlQXR22SEDUsJ2jKUligLwDQ7-0-4e302131e83f4e708d8ad64b5b3e95ce)
图2-45 程序运行结果(JSON混合样式)
丰富混合文本是由ITextElement类型的对象组成的,ITextElement是这样定义的:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_02.jpg?sign=1739295012-g3K9WsvH9xZ58AwAPfqZbdr1pqLb0jLx-0-7a77925fc99d905ab0df2270e375a47c)
其中ITextStyle对象就是各种样式属性的集合。比如第33行的代码格式化之后如下所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_03.jpg?sign=1739295012-78YGc852e6UFmRZ6vu2Rkodm49N4YDuY-0-ca96a0fe7470eb8595d261b7ce30602e)
这个对象的类型就是ITextElement的,其中的style对象为:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_04.jpg?sign=1739295012-9RkPxeWgeD6zMYc0GqlxqMZBCwfKRYVg-0-c0b5142cb34b4181fcbb9fb67867c328)
它的类型为ITextStyle。
接下来介绍一下HTML的方式。继续之前的项目,在Main类里继续添加如下的方法,参见二维码2-24:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_05.jpg?sign=1739295012-cjJae9WDfezk0KuoeWW4bPoM99FTYlwc-0-4693099a5ab7b27854cb33816e6bb622)
二维码2-24
相应地,onAddToStage也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_06.jpg?sign=1739295012-JwPw6i7PH6L38PVCFgBvdKBfQw61vYDt-0-9267ef2a2ad245239c1321b36f6c7099)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_01.jpg?sign=1739295012-rcNCx6v0VR0n6BBKEZihbUZ3ef7ibwU2-0-51817e08751611eb80399cabf2f6f5c8)
运行调试播放器观看结果,如图2-46所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_02.jpg?sign=1739295012-U4jfJOUQIwEiWd8JWHAZjDfkt5E9umSJ-0-a1e44d1ea57d270e202d9bd33af70c1d)
图2-46 程序运行结果(HTML混合样式)
这次绘制出了和JSON方式等价的混合文本。接下来介绍一下文本布局。
(3)文本布局
继续之前的项目,在Main类的内部继续添加以下的方法:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_03.jpg?sign=1739295012-laCyBJAkuLnQ6InMT6xjmNMQQ4VDg00L-0-0d372bd0ab499f18c5a0a01ed3a57150)
相应地对onAddToStage方法做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_04.jpg?sign=1739295012-Eyqn74KKlApTv7SZ9pgLCoIJhf7jaXMp-0-23b75b4d3bbb800fcd5b7b83fd220ea6)
运行调试播放器观看效果,如图2-47所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_01.jpg?sign=1739295012-VCxT32SewJravaKxQrHKp5ZEuG8uUllB-0-9992ea8f644738d41bb0ffdb6e62c1d4)
图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=1739295012-0uoSmSszMENS5orOiDaQs9hs31VOOyZd-0-919dee28b40fef799abf4348793513a0)
二维码2-25
运行调试播放器观看结果,如图2-48所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_03.jpg?sign=1739295012-7pZfoLLAUlidn47V9sPTHljd1K6luT8k-0-57802699d0bd5fc2552b56bd9de85f88)
图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=1739295012-xTcmSgUAclo9DOPpqQKgtv0xNkbuKFv6-0-f46a1e2fc716364559049566c5320a51)
二维码2-26
运行调试播放器观看结果,如图2-49所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_02.jpg?sign=1739295012-4uo1IKOBMcauw65lY2p7Ub71EtgiMhcB-0-8f85d44c63fa09cc4315e59a6cf5651b)
图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=1739295012-QtuwgrsgUhnLSEGBhfOYVQ33GYaofLs5-0-4ebc609ebcd288aaa54014a57015fbeb)
二维码2-27
onAddToStage方法也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_04.jpg?sign=1739295012-1h7IupZjASh6N7fiv5Ft0pSboj8SPEdJ-0-e2f1ad16e2300cdc97a757ab13150118)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_01.jpg?sign=1739295012-S2zSGmLC4nYV2icKsKtQo5nX9eS89BAj-0-37b4fd18485489d7cc73795ee9284465)
运行调试播放器观看结果,如图2-50所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_02.jpg?sign=1739295012-9QQmvX6PpS8ZHoZ8wAHY6jN3t0ESRR7X-0-9adec090280416e7277a9c6367181ecd)
图2-50 程序运行结果(文本超链接)
当单击第一行文字的时候,EgretWing的调试窗口会输出“text event triggered”。单击第2行文字不会有任何效果。