马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 BuErShen 于 2019-4-25 16:46 编辑
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] 纯文本查看 复制代码 # 样式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] 纯文本查看 复制代码 # 文字的绿色轮廓线。
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(
(600, 600),
(0, 0), Text("测试文本", style="drop_shadow_ex2"),
(0, 0), Text("测试文本", style="drop_shadow_ex1"))
这个办法只能用在文本组件中。对话窗口的文字,貌似没辙……
第二个问题:如何实现文字遮罩效果?
答:这是个略微有点亮骚并且常用功能。实现的关键在于“AlphaMask()”。AlphaMask()至少有两个入参,child是颜色,mask是遮罩图。对于文字遮罩来说,child是背景图,文本组件是mask。下面是一个样例。
这里我先做了个带渐变的图片:
图片名称为“ground.png”,定义:
[RenPy] 纯文本查看 复制代码 image mask_image = "images/background/ground.png"
接着定义文本组件:
# 为了突出遮罩效果,文号设置很大。
[RenPy] 纯文本查看 复制代码 # 为了突出遮罩效果,文号设置很大。
image test_text = Text("测试文本", size=300)
使用AlphaMask()定义一个遮罩效果的图像(image):
[RenPy] 纯文本查看 复制代码 # 这里提前使用At()将文本居中。
image test_text = AlphaMask("mask_image", At("test_text", truecenter))
显示效果如图:
当然,遮罩也可以用于视频。语法是类似的,这里就不写了。
第三个问题:还有啥骚操作吗?
答:AlphaBlend()也是个展示动态效果的好功能。它自身的使用比较简单,难点在于 设计control 这个参数。由于涉及到转场等问题,此处暂不展开……
最后,有一个特别需要注意的点:所有使用 alpha通道 的操作都可能会在安卓平台失效!如果做安卓移动端开发就比较麻烦……
预告部分:下个支线应该会配合主线的 变换(transform)内容讲解两个样例……
广告部分:Lemma论坛是个好东西,能搜出很多实用的内容~
“Ren'Py引擎从入门到放弃”系列教程 |