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

文章介绍了如何在RenPy中通过设置轮廓线模拟文字阴影效果,以及利用AlphaMask实现文字遮罩功能。同时提到了AlphaBlend()函数在创建动态效果中的应用,但要注意在Android平台上可能存在的alpha通道失效问题。
摘要由CSDN通过智能技术生成

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

支线系列是独立于基础之外的内容,会使用一些犄角旮旯的知识点,感觉有困难的同学可以暂时不(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通道 的操作都可能会在安卓平台失效!如果做安卓移动端开发就比较麻烦……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值