Feathers:text-renderers

来自Starling中文站
跳转到: 导航, 搜索

原文地址:http://wiki.starling-framework.org/feathers/text-renderers

目录

Feathers文本渲染器简介

默认情况下,Feathers的文本是使用 bitmap fonts 呈现的。位图字体非常适合用于游戏中字数较少的文字展示,如经常出现在游戏屏幕边缘的数值(如得分,弹药,生命值等)或按钮上的短标签和其它UI控件。它们没有大量的文字或大量的语言字符需求。位图文本可以缩放,但因为它是基于位图,建议只缩小不放大(避免模糊)。常见的做法是不同大小的字体使用不同大小的纹理,但会多占用很多空间。

Feathers还支持基于矢量设备字体和嵌入字体的显示。这种类型的文本是使用FlashPlayer的内置 flash.text.TextField 类,它被转换成一个Starling显示列表中的图像纹理。转换这种字体文字是比较慢的,因为需要先上传一个新的纹理到GPU,然后每个字符才可以简单地重用现有的子位图字体纹理。此外,每个独立的GPU渲染都需要有自己独立的纹理,这意味着更多的 state changes (状态变化)。然而,矢量字体提供了最大的灵活性,如涉及到显示多种字体大小且字体质量不会随字体大小的改变而变差,并且它们对文件系统的空间需求较少。最后补充,如果某些语言有太多的字符,设备字体是唯一可能的选择。

默认的文本渲染器

有两种方法可以选择Feathers的文本渲染器。默认情况下,所有的文本渲染器是通过调用该函数创建的 FeathersControl.defaultTextRendererFactory()button's 按钮的文本, header's 标题的文本, 和 toggle switch's 切换开关上的 on 和 off 的文本等这些地方,如果不指定一个自定义的文本渲染器,都会使用默认的文本渲染器。 默认的实现 FeathersControl.defaultTextRendererFactory() 创建一个 BitmapFontTextRenderer, 它看起来像这样:

function():ITextRenderer
{
    return new BitmapFontTextRenderer();
}

如果您希望使用设备字体或嵌入的字体,你可能要将此代码添加到您的应用程序,而不是使用 TextFieldTextRenderer

FeathersControl.defaultTextRendererFactory = function():ITextRenderer
{
    return new TextFieldTextRenderer();
};
Label(标签)组件
Label(标签)组件始终使用默认的文本渲染。主题将为Label(标签)匹配相应的文本格式,但如果你直接将它实例化,你需要手动的设定TextFieldTextRendererBitmapFontTextRenderer在一般情况下,如果你需要一个组件来显示文字,你应该选择Label(标签)。

Label(标签)类对外公开一个属性称为 textRendererProperties 。您可以用它来给文本渲染器传递属性,例如启用自动换行或其他功能。有关Label(标签)的完整详细信息,请参阅 How to use the Feathers Label component

样式文本:位图字体

BitmapFontTextRenderer 通过调用一个类 [[1]] 来设置文本样式,包括注册的 BitmapFont 的字体名称(或任何 BitmapFont 的实例,不管它是否已被注册),字体的大小,文本的颜色(使用starling的着色功能),还有文本的对齐方式。您还可以禁用默认的字距调整,如果你想要调整字母间距。

要使用wordWrap(自动换行),将wordWrap设置为 true 并且给 BitmapFontTextRenderer(或者Label)设置一个widthmaxWidth值。您还可以添加使用手动换行符\n

样式文本:设备和嵌入字体

由于 TextFieldTextRenderer 使用本地 flash.text.TextField ,它将使用本机 flash.text.TextFormat 用于文本的样式。

默认情况下,TextFieldTextRenderer 将用 TextFieldAutoSize.LEFT 来确定其默认尺寸。要启用自动换行,需设置一个 width 值并且设置 wordWraptrue

要使用嵌入字体,不要忘了把 embedFonts 设置为 true

另一种选择:滚动文字

有时候,很长的文本可能太大,因为 TextFieldTextRenderer 显示的总宽度或高度大于2048x2048的纹理尺寸。在这种情况下,您可能会考虑使用 ScrollText(滚动文字),这是一个组件,在Starling层之上显示本机的 flash.text.TextField 。此组件不像 TextFieldTextRenderer 那样通过Starling显示列表呈现,但它可以被限制在一个区域里滚动文字。如果其上没有可显示的文字,您不会在应用程序或游戏中看到它。

自定义文本渲染器

如果您想使用Flash文本引擎(FTE),文本布局框架(TLF),或任何其它渲染文本的形式,您可以实现 ITextRenderer 接口。除非你自定义的渲染器能够直接绘制GPU ,很有可能你将需要实现某种形式的纹理快照,类似 TextFieldTextRenderer 。由于Starling是开源的,这个类可能是一个全新的文本渲染器的良好起点。

相关链接

相关详细的教程,返回Feathers Documentation


翻译者:周祺浩

个人工具
名字空间

变换
操作
导航
Starling中文资料
Starling原创教程
论坛
友链
工具箱