如何在Corona SDK中将图像效果应用于文本(TextObject)?

时间:2017-03-16 01:50:02

标签: corona

我想将模糊,擦除和屏蔽等图像效果应用到我的Corona SDK应用中显示的文字。如果要显示的文本是静态的,我可以将其存储在图像文件中。可以使用display.newImage()实例化基于该图像的DisplayObject,并通过设置对象的fill属性来应用效果。 (这在Corona开发人员图形/音频/动画指南的section on image effects中有解释。)

但是,每次用户启动应用程序时,我需要显示的文本都会更改。它基于从列表中随机选择的短语组合,并以取决于用户偏好的字体和字体大小显示。因此,在这种情况下不能使用图像资产方法。

有没有办法将图像效果应用于使用display.newText()创建的TextObjects?这些对象没有fill属性,因此不清楚这些效果是否可以使用。

1 个答案:

答案 0 :(得分:0)

TextObjects确实没有fill属性,据我所知,没有办法直接将图像效果应用于它们。我尝试了各种图像效果甚至更简单的填充,如渐变。没有骰子。

然而,我意识到,TextObjects(与所有DisplayObjects一样)可以插入SnapshotObject的GroupObject中, 具有fill属性。来自Graphics dev指南的Snapshots section

  

快照继承了矩形的所有功能。例如,所有2.5D效果都可用于快照对象。

通过仅将TextObject插入快照并将图像效果应用于后者,可以有效地将效果应用于文本。

此代码段演示了此解决方案。我正在实现的效果使得最初隐藏的文本通过具有模糊边缘的圆形锁孔出现。 (过渡分三个阶段完成,以保持内半径和外半径之间的模糊区域。)

local textString = "This is some string generated at Runtime."
local textObj = display.newText({
    text = textString,
    font = myFavoriteFont,
    fontSize = myFavoriteFontSize})
textObj:setFillColor( 0 )

local snapshot = display.newSnapshot( textObj.contentWidth, textObj.contentHeight )
snapshot.group:insert( textObj )

snapshot.fill.effect = "filter.vignetteMask"
snapshot.fill.effect.innerRadius = 0.01 
snapshot.fill.effect.outerRadius = 0 

sceneGroup:insert( snapshot )

local totalTimeForTextToAppear = 2000 -- duration of transition in milliseconds
local timeStep = totalTimeForTextToAppear / 3 -- duration of each phase of the transition
transition.to( snapshot.fill.effect, {delay = 0, time = timeStep , innerRadius=0.5})
transition.to( snapshot.fill.effect, {delay = timeStep, time = timeStep, innerRadius=1} )
transition.to( snapshot.fill.effect, {delay = timeStep, time = timeStep, outerRadius=.5} )
transition.to( snapshot.fill.effect, {delay = 2 * timeStep, time = timeStep, outerRadius=.99} )

(使用这种方法时,所有关于Android设备上的快照的常见“问题”都适用。这些都是discussed here。)

这是我在问题中找到的解决方案。我很想看到我可能错过的任何其他解决方法。