2013年6月26日
周三常见问题解答:显示文本对象
现在是周三,又到了常见问题解答时间。以下是一些关于显示文本对象的常见问题解答。
1. 我正在创建大量的 display.newText 对象,这正在减慢我的应用程序的速度。为什么?
在屏幕上显示文本似乎很简单,但实际上可能非常复杂且耗时。当您使用 display.newText 创建文本时,必须首先将文本转换为位图,然后发送到 openGL,以便可以在屏幕上呈现。文本越大(字符数和字体大小),此过程所需的时间就越长。它还像显示图像一样消耗纹理内存。
2. 我正在屏幕上移动文本,这会减慢我的应用程序的速度吗?
移动或缩放文本对象不会减慢 Corona SDK 的速度。如果您正在更改文本,则需要重新创建位图,这可能会影响帧速率。更改字体大小或字体类型时也是如此。这些都需要一个新的位图,并且可能会影响性能。
3. 我正在使用 display.newText,并在文本应该出现的地方看到一个白色或黑色块。怎么回事?
当文本超出设备的纹理限制时,您会看到黑色或白色块。由于文本对象在显示之前会转换为位图,因此具有较大字体大小的长文本字符串很容易超出某些低端设备的纹理内存限制。解决方案是限制单个 display.newText 对象中显示的文本量。您应该将大型文本对象分解为多个文本对象。
4. 如何对齐文本?
从每日构建版本 1143 开始,我们在 display.newText 中添加了文本对齐功能。您可以指定“左对齐”、“居中对齐”和“右对齐”。唯一的限制是您不能在文本对象构造完成后更改对齐方式。
当我们向 display.newText 添加文本对齐功能时,我们更改了向函数提供参数的方式。现在,参数以 Lua “option” 表而不是单独的参数发送。 display.newText 仍然支持旧版调用,但您不能使用它来对齐文本。请注意,如果使用新的选项表调用 display.newText,则您指定的 x 和 y 值是指文本对象的中心,而不是旧版调用中使用的 左 和 上。
为了使文本对齐起作用,您必须提供 width 参数。如果未提供 height 参数,则假定为 0(将来可能会更改)。如果未指定对齐方式,则假定为左对齐。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
display.setDefault( "background", 128 ) -- 创建一个矩形以显示我们的文本字段的边界 local rect = display.newRect( 50, 35, 200, 150 ) rect:setFillColor( 40 ) -- 右对齐,单行 local textOptions1 = { text = "第 1 行右对齐", x = 100, y = 50, width = 200, align = "right", font = native.systemFont, fontSize = 14 } local text1 = display.newText( textOptions1 ) text1:setReferencePoint( display.TopLeftReferencePoint ) text1.x = 50 -- 居中对齐,多行 local textString2 = "第 1 行居中对齐\n第 2 行居中" local textOptions2 = { text = textString2, x = 150, y = 100, width = 200, height = 0, align = "center", font = native.systemFont, fontSize = 14 } local text2 = display.newText( textOptions2 ) text2:setReferencePoint( display.TopLeftReferencePoint ) text2.x = 50 -- 未指定对齐方式 local textOptions3 = { text = "行默认左对齐", x = 200, y = 150, width = 200, font = native.systemFont, fontSize = 14 } local text3 = display.newText( textOptions3 ) text3:setReferencePoint( display.TopLeftReferencePoint ) text3.x = 50 |
文本对齐也适用于自定义字体,但您必须在 Mac 或 Windows 模拟器上安装这些字体才能使其工作。
5. display.newEmbossedText 是否支持对齐?
目前,display.newEmbossedText 对象的文本对齐尚未实现。我们希望能在每日构建版本中尽快推出。
这就是今天的全部问题。我希望您喜欢它们,甚至学到了一些东西。
Lerg
发布于 14:20,6 月 26 日在 display.newText 和核心的其他函数中调整行距如何?
Tom
发布于 23:18,6 月 26 日如果能有这两个功能就太好了
与文本相关
– 用于显示分数等的 display.newText 的简单版本,仅使用数字和预渲染图像等...无需每次都渲染。这将有助于使用非常快的更新时间来显示计时器或分数计数器。
与文本无关
– 在 Corona 模拟器内部创建一个屏幕截图功能,我在 Windows 上非常需要这个功能(在 Mac 上这是操作系统内置的)。
Tom
Dennis Koble
发布于 11:12,6 月 27 日当然,您始终可以使用 Alt-Prt Scr 来捕获 Corona 窗口。
我一直使用它,然后将其粘贴到 mspaint.exe 中并另存为 png 文件。
虽然不是您所要求的,但它非常有用。
-Dennis
hangn
发布于 03:35,6 月 28 日我正在尝试显示长文本,但我看到了一些白色块。我知道我必须为每一行创建一个文本对象。您能否开源 Corona 包装文本的方式?我的意思是,一个函数,我们传递文本、字体、大小,然后将其分解为一个表格。
helios narcissus
发布于 03:04,6 月 29 日那么在 hangaroo 游戏中哪个更好用呢??
display.newText 的变化值
或
字母精灵?