![游戏开发实战宝典](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=1739388425-4zhh30XHXIly3Cg3rhhPhgH4CtdCLSdT-0-6dc929676080d59a2aabd5f549a7c9dc)
二维码2-17
运行调试播放器观看结果,如图2-37所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_02.jpg?sign=1739388425-J0zfgclqSR4j3wukgJzGUhhmDjNVuDqE-0-58eb2a223585a0d6acf89f341d9853dc)
图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=1739388425-xCVU2TZt049vmt4HbGJBkapmFGya1jkC-0-cdd71dd2a10a64fb03c24cdba8273ae2)
二维码2-18
onAddToStage方法里也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_04.jpg?sign=1739388425-0j8fug5B4LzkqDl7weQWUDLSmIjT5BGJ-0-8dae5ac35739461c34f52e218ccbc20e)
运行调试播放器观看结果,如图2-38所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/46_05.jpg?sign=1739388425-fi2Zy2xVEeTASOGrO05i8jwtxGJwgvwf-0-ace096fde548a311a18b8183d40c77b4)
图2-38 程序运行结果(输入文本)
在普通文本下面出现一个黑色的文本,单击这个黑色文本的后,就可以编辑这个文本,这个就是输入文本对象。输入文本对象与普通文本对象的区别就在于第3行代码:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_01.jpg?sign=1739388425-jZuFh0uL5YfUMMf9ZX4LRyt4KMsXOy4M-0-f6e9eb7ebcdb4ecbb76dc4ae490ee401)
这句代码可以把普通文本变为输入文本。
接下来讲解一下位图文本,继续之前的项目,在Main类中继续添加以下代码,参见二维码2-19:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_02.jpg?sign=1739388425-EMi7EVTowNJ4vMcUYE7ocLyGLbmJWGAv-0-f42f0e5965d3302c5df2666dd6207aa6)
二维码2-19
onAddToStage方法也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_03.jpg?sign=1739388425-bExdTtyh1lJwXkYr72ZuHOkA39rMNFVk-0-adf969a0c16c36f57e7d1a54db774352)
运行项目之前要确保项目文件夹内的resource文件夹内有cartoon-font.fnt和cartoon-font.png两个文件。
运行调试播放器观看结果,如图2-39所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/47_04.jpg?sign=1739388425-ffsuD3cG7FLOVhmNMYIrsDsiPJxe5m3S-0-741c29aabf16d3ef149fb30049d79471)
图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=1739388425-KLtq3Y0qxpEpIg9ba98j7amOEtujSj5m-0-ca8a95493944fb876491e707fb14bc2a)
二维码2-20
运行调试播放器观看结果,如图2-40所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_02.jpg?sign=1739388425-n84ACC9OpyueR9xRHpNqYzxbg1JEsx1n-0-5e5ba23a4535306e8eef73cacd73f0df)
图2-40 程序运行结果(设置字体)
可以看到,把文字的字体设置为“Impact”了。
在代码的第13行,通过TextField对象的fontFamily属性来改变字体。接下来改变一下字号。继续上一个项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_03.jpg?sign=1739388425-7pnwLf8sUWOcsMJtbpX7B36t4jaJomrj-0-50e70eef49469bef4fbd96e30f99b72e)
启动调试播放器观看结果,如图2-41所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_04.jpg?sign=1739388425-jhuMjgOw4ONGF9Gc1AD3heZFsC8CwI5N-0-1938591e15d1b1857a529a4dfe72f9de)
图2-41 程序运行结果(设置字号)
文字明显变大了。在代码的第4 行,把文本的宽度加大了,否则如果增大字号会裁剪文本。代码的第8行,通过size属性,将字号设为50。
接下来看一下文本的颜色。继续之前的项目,对其做出如下修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/48_05.jpg?sign=1739388425-l4nfSg2YA4oUcnCJLwLfXJMn0IpzJRRL-0-9221dee6db0012ed2c83b438fbdf1455)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_01.jpg?sign=1739388425-SXL9PEsrcqqhmlu3yvuP47BJECg8EX0n-0-5c096644d2f6bf12b64a14d665f7194f)
运行调试播放器观看结果,如图2-42所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_02.jpg?sign=1739388425-h5Mu1p5yRDg5tMVOfuFHEfqcyFyLO4qM-0-3029a80f53fa875a176bb5fdbce08b33)
图2-42 程序运行结果(设置颜色)
文字变成红色的了。这是因为在代码第9行,将属性textColor设置为0xff0000,这个16进制数字就是红色的颜色值。
接下来看一下描边效果。继续上一个项目,对其做出如下修改,参见二维码2-21:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_03.jpg?sign=1739388425-OieMKyC0C40CPw6Hg8a3iaRbt96n67Df-0-4ffe32d58e44be04605f39203f5dc1f1)
二维码2-21
运行调试播放器观看结果,如图2-43所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_04.jpg?sign=1739388425-qgUeeUjkaYiViqMdMf3faYems2r76BPK-0-a987bb98597991e7d6e42b5758a0bb1b)
图2-43 程序运行结果(设置描边)
文字加上可蓝色的描边。这是因为在代码第10 行,通过 strokeColor属性来指定描边颜色。在第11行,通过stroke属性来指定描边的宽度。
接下来看一下加粗和斜体效果。继续上一个项目,对其做出如下修改,参见二维码2-22:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_05.jpg?sign=1739388425-BqoHAUvUfzt7x9q8MZ4qmy8k0IrJ8szy-0-b0e874fd864ba4b966ba1cd50f2b74a9)
二维码2-22
启动调试播放器观看结果,如图2-44所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/49_06.jpg?sign=1739388425-EEIipiS3dAUwpe92e0SFJJjEhQSkBHRe-0-836ed2fc40925d5dfb9a2559d03eb5c7)
图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=1739388425-cVbEfaIOfwMtY7MzDsy7LxyhmIPmCBNt-0-a0db2d7c52a01b98db40181df668fa78)
二维码2-23
把之前的功能提取到一个称为drawText的方法里。运行调试播放器观看结果,如图2-45所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_01.jpg?sign=1739388425-bAnfGbrmJnJg58HQvsTiknKaG8EE3NOR-0-bc671431ef923efe95733708b89bda9c)
图2-45 程序运行结果(JSON混合样式)
丰富混合文本是由ITextElement类型的对象组成的,ITextElement是这样定义的:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_02.jpg?sign=1739388425-u3RxIXc7TYxAqs8VHdhjEJd4Oz7CT7fU-0-32824219d9202931155bf4444f232dd0)
其中ITextStyle对象就是各种样式属性的集合。比如第33行的代码格式化之后如下所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_03.jpg?sign=1739388425-mnYQol6jatbObj9NfO1w4NLp3skbqtiz-0-559e29635d0d1a4bd3f99f8699abb705)
这个对象的类型就是ITextElement的,其中的style对象为:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_04.jpg?sign=1739388425-CtKEwFFWzNEK4mGKC4pca7iJWIvEysp6-0-a7e94924e99b003400479c81e82056c7)
它的类型为ITextStyle。
接下来介绍一下HTML的方式。继续之前的项目,在Main类里继续添加如下的方法,参见二维码2-24:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_05.jpg?sign=1739388425-FjguLsU58W6x93xgJFJTYbnHY4TPf80K-0-6453bc4ee5c3c9337282d0c6af39dace)
二维码2-24
相应地,onAddToStage也要做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/50_06.jpg?sign=1739388425-9kBRzt9PDHsU3wT369cdrDIzs4i5ejQB-0-ad871e641ab5c1a44b3042308bee47e7)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_01.jpg?sign=1739388425-GNIxZTLGiWwM7zUg689xJ3yh5abElpN9-0-d373e2c617a94ffdc152df03031a5b19)
运行调试播放器观看结果,如图2-46所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_02.jpg?sign=1739388425-P8SxWd2fxSarwYvyXrEjInmsbVcJ8DSf-0-f3976ffd211d1498ba56b1c6ce92eb8c)
图2-46 程序运行结果(HTML混合样式)
这次绘制出了和JSON方式等价的混合文本。接下来介绍一下文本布局。
(3)文本布局
继续之前的项目,在Main类的内部继续添加以下的方法:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_03.jpg?sign=1739388425-tZ3rb7K9olvghpV5e0vrTcSpjDvwzaGp-0-7ecc16f9240c82a1bd2af745f01b0fef)
相应地对onAddToStage方法做出修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/51_04.jpg?sign=1739388425-hYbCJss1IM49rbpYu49NJDG4nuLoU6UA-0-4913deb0ef0c2d9a45f68f4ef3744ee3)
运行调试播放器观看效果,如图2-47所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_01.jpg?sign=1739388425-8OMaYUXi09GDWBlKPejXXYryZJyMk2g6-0-8e665947fff6a0046ada1520492ce47c)
图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=1739388425-55QTAKXb2I0JVzdZiQZtrDUi6AGnmhLF-0-b32237ebd03639b36a0d2b7289f72b4c)
二维码2-25
运行调试播放器观看结果,如图2-48所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/52_03.jpg?sign=1739388425-I8UpVIDJEpnUBS2r5NivQeJzWGEuft2S-0-5af5cc21de5beb040e72d6476c2692e4)
图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=1739388425-2kam7RWcvpyJU7ZqD6eMAqif7eAAyzct-0-0a795a866c9f90a50a139d41b738756f)
二维码2-26
运行调试播放器观看结果,如图2-49所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_02.jpg?sign=1739388425-NgDK7Kw5nyQK9DMhrxwqtuVrNJg64zaF-0-ac340602b90cbee4dbbb5e5264fd1976)
图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=1739388425-7EUxq3fpFKE4JdNpz36z5Rs2KYmEA9OQ-0-785aa935c93ad4aff9c10fdf89a2ff00)
二维码2-27
onAddToStage方法也要做出对应的修改:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/53_04.jpg?sign=1739388425-5MO24Mb5W3ZWoSmwAISvtMciUVDBAzJH-0-f282147ab7ace6c24a1120eac352a47e)
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_01.jpg?sign=1739388425-qa7oS82YMdy85nZTSi6scfOrGNrort80-0-e93cb35994eb60688dbc5c08d1c59207)
运行调试播放器观看结果,如图2-50所示:
![](https://epubservercos.yuewen.com/190630/23446275309889706/epubprivate/OEBPS/Images/54_02.jpg?sign=1739388425-agETzSzPxuQX4uemcS53qqCJMIdziQZN-0-380143382ea2fdda33b17ba74bd0abf3)
图2-50 程序运行结果(文本超链接)
当单击第一行文字的时候,EgretWing的调试窗口会输出“text event triggered”。单击第2行文字不会有任何效果。