RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 580|回复: 0

[转载] Ren'Py引擎从入门到放弃(4)——图像、图层以及4个常用语句

[复制链接]
发表于 2019-4-25 18:50:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 BuErShen 于 2019-4-25 16:45 编辑

Ren'Py引擎从入门到放弃(4)——图像、图层以及4个常用语句

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

终于要谈图像了……

“A visual novel isn't much of a visual novel without pictures.”没有图片就不要搞什么视觉小说了,直接写网文或者轻小说就行了。如果有人想写的话,我倒是知道平台……咳咳,扯远了。这是入门介绍的第四篇,主要内容是图像的基础部分。

第一个问题:如何定义图像(image)?

答:定义图像(image)的方法有两种:
  • 把图片文件(png 和 jpg格式)放入 images目录。
  • 在脚本中使用图像定义语句。

第一种方法的关键在于:图片文件的命名。去掉文件扩展名之后,图片名字符串强制转换为小写,字符串第一个空格前的子字符串就是图像的名称(也就是说不支持中文),如果没有文件名没有空格分隔则整个字符串就是图像名称。例如,我们请来了尼禄(?),图片名称为“nero normal.png”,直接放入image目录中(再次建议最好单独建一个character子目录专门放角色图片,甚至每个角色建立单独目录),在脚本中不需要任何定义就可以直接使用show语句显示:
[RenPy] 纯文本查看 复制代码
# show语句的用法在后面
show nero normal

效果如下:
效果如下:.jpg
Ren'Py会自动搜索所有在 images目录及其子目录下的图片资源,并根据图片文件名定义好图像(image)便于直接在脚本中使用。如果存在同名图片,则按照拉丁字母排序遍历整个目录结构后得到的顺序,使用最先匹配到的那张图。如果不能理解上一句话,就改为记住:“避免图片重名!”图片同名,但扩展名不同的也属于图片重名。图片名如果使用空格分隔成几个字段的话,第一个字段就表示图像标签(tag),后面的字段都表示图像属性(attribute)。图像标签和图像属性在后面的几个语句中会解释,主要作用是用来提(tou)效(lan)。

需要注意,只能使用空格来分隔图像标签跟图像属性,下划线是不行的。在官方文档中有一句:In the example above, we might use "mary_beach_night_happy.png" as the filename. 这句话有一些误导性。下划线分隔的文件名并不会自动识别为图像标签和图像属性字段。

图片文件命名的规则和标准非常重要。合理的命名方式能避免开发过程中的不少混乱和问题。所以放在开头说明。

然后是脚本内定义图像(image)。这里的图像仅仅是狭义的image,而不是范围更大的 可视组件(displayable)。定义图像很简单直接,使用image语句:
[RenPy] 纯文本查看 复制代码
# 定义角色图像
image nero normal = "images/charater/nero1.png"

使用这种方式定义的图像(image),文件名就可以随意……如果不想用Ren'Py自动识别 tag和 attibute的机制,就可以自定义文件名并使用image语句定义图像(image)。

同样的,还可以用来定义背景图:
[RenPy] 纯文本查看 复制代码
# 定义背景图像
image bg summon = "images/background/bg summon.png"

image语句还可以把一些图片合并起来使用,比如:
[RenPy] 纯文本查看 复制代码
image nero double = HBox(
    "images/charater/nero normal.png",
    "images/charater/nero normal.png",
)

我们就可以得到左右并排两个尼禄。啊~双倍的尼禄,双倍的快乐~
啊~双倍的尼禄,双倍的快乐~.jpg
附带说明,纯色(solid)也可以使用image语句直接定义。特别是常用的全黑和全白,在转场之类的时候有用:
[RenPy] 纯文本查看 复制代码
image black = "#000"
image white = "#ffffff"

第二个问题:图像(image)相关的常用语句和语法有哪些?

答:常用的语句有4种,分别是:image、show、scene和hide。

  • image用于定义图像,上面讲的最基础的定义方法。后续讲到ATL语言部分会进一步深入复杂的用法。
  • show用于显示图像(image)。虽然实际使用时可以不写全所有的图像标签和图像属性字段,让Ren'Py根据固有规则自动匹配。建议还是写全,避免不必要的麻烦。
  • scene用于清空图层,然后通常会加上一个图像名并显示出来,后面不带参数的情况下会清空图层(layer)上所有显示的图像。通常用在场景开头,清空原有图像并显示新的背景图。比如在开头:
    [RenPy] 纯文本查看 复制代码
    scene bg summon
  • hide用于隐藏图像。如果光显示而不隐藏的话,场景里所有角色都会挤在画面中,这种群口相声效果一般不是我们希望出现的。通常最多显示正在对话的两个角色就可以,其余的角色隐藏。

这里就出现了可以偷懒的知识要点(敲黑板)!一个角色的不同表情通常对应不同的图像,如果要切换角色表情的话,最朴素的办法是——每次先用hide语句隐藏当前图像然后用show语句显示新图像。比如,我们定义了图像 nero1 为普通表情的尼禄,定义了 nero2 为微笑表情的尼禄,应该这样写:
[RenPy] 纯文本查看 复制代码
show nero1
"嗯唔嗯唔。"
hide nero1

show nero2
"余很高兴!"

如果不隐藏 nero1,直接显示 nero2 的话,后者会直接覆盖在前者上。对角色立绘轮廓一样的情况,观感上看不出来。如果轮廓不一致的话,就……
如果轮廓不一致的话.jpg
如果同一个角色的不同图像具有相同的图像标签(tag)以及不同的图像属性(attribute)的话,可以不用hide语句直接show语句切换。比如我们拥有各种“nero ****”图片文件,对应的图像标签(tag)都是 nero 。这种情况下使用show语句,画面上只会显示一个带有相同tag的图像。show语句只需要关注不同的图像属性(attribute)就可以。例如(截图不放了):
[RenPy] 纯文本查看 复制代码
show nero normal
e "嗯唔嗯唔。"

show nero smile
e "余很高兴!"

show nero foolish smile
e "罗马!"

另外,还记得在上一篇里提到的使用“角色名+图片属性(attribute)”的形式同时改变角色图像并显示对话文本吗?不过那一篇的示例代码有点问题,第一次显示图像还是需要用show语句的……

所以,定义角色时写上图像标签(tag):
[RenPy] 纯文本查看 复制代码
define e = Character("尼禄", image="nero")

上面的代码可以进一步简化为:
[RenPy] 纯文本查看 复制代码
show nero normal
e "嗯唔嗯唔。"

e smile "余很高兴!"

e foolish smile "罗马!"

showhide语句后面可以接上几个特性(property),详情请参考官方文档。at关键词后面可以带自定义的 变换(transform)。详细内容会在变换部分展开。

show、hide和scene语句后面可以接上 with分句,后面带转场(transition)效果。详细内容会在转场部分展开。(当然,那两部分内容什么时候写是完全不确定的。切勿催更,越催越慢,再催放弃……)

第三个问题:图层有哪些?分别干什么用?

答:图像是分层渲染的。图层可以理解为渲染顺序最大的分类。Ren'Py中默认的图层列表定义如下:
[RenPy] 纯文本查看 复制代码
define config.layers = [ ‘master’, ‘transient’, ‘screens’, ‘overlay’ ]

实际渲染也是按照这个顺序。基本原则是先渲染的图层显示在最下面,后渲染的图层覆盖在前面的图层上。默认情况下定义的所有图像(image)都在“master”图层上。“transient”主要用于UI,“screens”用于界面,“overlay”我不知道用来做啥的……同一个图层内的图像(image)可以在显示的时候使用 onlayer 指定图层,具体的使用(大概)以后自定义界面的时候会展开。

好了,第四篇差不多可以结(fang)束(qi)了……

认怂部分:我了解本次使用的所有图片素材版权归属于 TYPE-MOON和 Aniplex,如果他们发律师函要告我,肯定会删掉所有内容的。幸好写的东西没有商业价值,也不用赔钱。也就是俗话说的 “玩完了不给钱,就不算嫖咯”~

预告部分
:下一篇依然是图像,是说 transform 还是 transition还没定。选择困难症,胃疼……



“Ren'Py引擎从入门到放弃”系列教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2019-10-22 07:01 , Processed in 0.089539 second(s), 27 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表