Ren‘Py引擎从入门到放弃(支线2·续)——只有文字也要搞NV(?)

世上无难事,只要肯放弃。

支线系列是独立于基础之外的内容,会使用一些犄角旮旯的知识点,感觉有困难的同学可以暂时不(fang)看(qi)。

本篇内容将继续讲解文本的一些使用和处理。请善用官方文档的搜索功能,能解决大部分疑问。

续上一篇支线2,我们了解一下,如何在不动用美工人员的情况下,把文本搞点花样出来。

第一个问题:如何添加文字投影?

答:与大多数图像编辑软件不同,Ren'Py没有给文字直接添加投影(drop-shadow)的“选项”。但是,与其他很多游戏引擎类似,Ren'Py提供了轮廓线(outlines)来实现类似效果。文档原文的说法是:The outline functionality can also be used to give drop-shadows to fonts, by specifying a size of 0 and non-zero offsets. 就是把轮廓线外延size设置为0,然后添加一个非零偏移量。

举个栗子,我们要给几个字添加右下方的投影。样例代码如下:

[RenPy] 纯文本查看 复制代码 ?
1 2 3 4 5 6 7 # 样式drop_shadow_1 style drop_shadow_1:     size 40     outlines [ (0"#101010", 2, 2) ]   # 使用文本组件定义图像 image test_text_1 = Text("测试文本"style="drop_shadow_1")


这样显示出来的文本就会带一个投影,显示在文本的右下方。

关于“什么是样式”的问题,我(大概)会在主线的文章中说明。

需要注意,轮廓线(outlines)是样式(style)的一个特性(property)。在定义样式时,同一个特性只能出现一次,否则程序会报错。也就是说,不能同时出现轮廓线和投影效果。不过,文本组件(text displayable)可以使用多个图像合成的办法,也就是使用Composite。Composite有个限制,需要指定合成后的大小。如果合成中的文本组件宽度超过Composite定义的尺寸,文字就会自动换行,总之不灵活。代码如下:

[RenPy] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 # 文字的绿色轮廓线。 style drop_shadow_ex1:     size 80     outlines [ (2"#008000", 0, 0) ]   # 文字的深灰色投影。 style drop_shadow_ex2:     size 80     outlines [ (4"#404040", 4, 4) ]     color "#404040"   # 合成的显示顺序与Composite入参顺序一致。所以先显示投影,再显示带轮廓线的文字。 image test_text_2 = Composite(     (600600),     (00), Text("测试文本"style="drop_shadow_ex2"),     (00), Text("测试文本"style="drop_shadow_ex1"))


这个办法只能用在文本组件中。对话窗口的文字,貌似没辙……

第二个问题:如何实现文字遮罩效果?

答:这是个略微有点亮骚并且常用功能。实现的关键在于“AlphaMask()”。AlphaMask()至少有两个入参,child是颜色,mask是遮罩图。对于文字遮罩来说,child是背景图,文本组件是mask。下面是一个样例。

这里我先做了个带渐变的图片:

图片名称为“ground.png”,定义:

[RenPy] 纯文本查看 复制代码 ?
1 image mask_image = "images/background/ground.png"


接着定义文本组件:

# 为了突出遮罩效果,文号设置很大。

[RenPy] 纯文本查看 复制代码 ?
1 2 # 为了突出遮罩效果,文号设置很大。 image test_text = Text("测试文本"size=300)


使用AlphaMask()定义一个遮罩效果的图像(image):

[RenPy] 纯文本查看 复制代码 ?
1 2 # 这里提前使用At()将文本居中。 image test_text = AlphaMask("mask_image"At("test_text", truecenter))


显示效果如图:

当然,遮罩也可以用于视频。语法是类似的,这里就不写了。

第三个问题:还有啥骚操作吗?

答:AlphaBlend()也是个展示动态效果的好功能。它自身的使用比较简单,难点在于 设计control 这个参数。由于涉及到转场等问题,此处暂不展开……

最后,有一个特别需要注意的点:所有使用 alpha通道 的操作都可能会在安卓平台失效!如果做安卓移动端开发就比较麻烦……


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部