RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 561|回复: 0

[转载] Ren'Py引擎从入门到放弃(3)——成功定义一个角色

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

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

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

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

Ren'Py引擎从入门到放弃(3)——成功定义一个角色

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

先吐槽一下你乎:上周写的《Ren'Py引擎从入门到放弃(支线1)——自定义开场画面》,被“建议修改”,理由是“违法违规”。emmmmmm……完全不知道哪里“违法违规”。虽然申诉了,但估计放出来还得花几天。好在是支线,不影响主线流程(自我安慰中)。

这是入门介绍的第三篇,主要内容是 角色(character)对话(dialogue)

第一个问题:为何要“定义”角色?

答:这个问题很重要,比“如何定义角色”更重要,所以我把它放在开头。

因为在视觉小说(Visual Novel)中,“角色”是唯一负责对话的对象实例(旁白 narration 也是一个“角色”),同时还可能带有图像(image)类的属性或功能。岔开说一句,这里说的图像类,包括最常见的 图像(image)精灵(sprite)以及7.0新增的 层叠式图像(layered image),具体的功能特性我们后续再展开。

定义“角色”能够多·快·好·省地实现人物对话和图像显示等需求。

第二个问题:如何定义角色?

答:在入门的第二篇中,我们新创建工程的模板脚本中见到过这样一句:
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳")

这就是一个角色的最小化定义。其中的“e”是一个变量,也可以看作是角色的别名。后面就可以直接使用“e”,来让角色“艾琳”开口说话:
[RenPy] 纯文本查看 复制代码
e "您已创建一个新的 Ren'Py 游戏。"
e "当您完善了故事、图片和音乐之后,您就可以向全世界发布了!"

每条 e+空格+字符串 形式的脚本就会在对话窗口中显示“艾琳”的一句话。

一般情况下,脚本中角色的每一段话都会导致对话窗口内容更新并暂停,需要一个鼠标点击事件(event)才能触发下一段话的内容。

角色对话内容可以进一步定制化,例如:
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", who_color="#c8ffc8", window_background="frame.png")

这样定义角色的话,名字的文本颜色是RGB #c8ffc8(一种淡绿色),角色对话窗口背景使用图片“frame.png”。详细的定制化项目请参考官方文档。

接下去的内容是重点——人物立绘。定义人物时可以加上一个图像标签(image tag):
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", image="eileen")

Ren'Py在处理带有图像标签的角色定义时,会自动搜索 game\images 目录下所有文件名满足“eileen *” 形式的图片文件(*是通配符),并与角色“e”关联。例如,在教程工程中,有3个以“eileen”开头的图片文件,分别是
[RenPy] 纯文本查看 复制代码
eileen concerned.png
eileen happy.png
eileen vhappy.png

图像标签都是eileen,后面的部分称作图像属性(attribute)。

角色图像的显示可以使用show语句(详细的内容我们后续会讲),也可以使用“角色名+图片属性(attribute)”的形式同时改变角色图像并显示对话文本。例如:
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", image="eileen")
label start:
    show eileen happy
    e "很高兴认识你。"

可以写成:
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", image="eileen")
label start:
    e happy "很高兴认识你。"

成功偷懒,少写了12个字符和1个回车,舒服~

还有能更加偷懒的:独白模式(monologue mode)!简单来说,就是角色的对话内容放进成对的3个英文双引号中,用空行分割。例如:

“艾琳”同学就会指导你们如何从入门到女装(雾)。

[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", image="eileen")
label start:
    e """
    学习Ren'Py第一步是看文档。

    学习Ren'Py第二步是练习样例。

    学习Ren'Py第三步是放弃。

    或者……女装!
    """

第三个问题:还有什么其他的骚操作吗?

答:大部分对话内容的定制化都涉及到文本样式(style),非常枯燥……这里就不说了(毕竟我也不懂)。其他的嘛……有个功能值得注意——对话内容的前缀和后缀。

我们在定义角色时,可以传入两个参数:what_prefix 和 what_suffix 。例如:
[RenPy] 纯文本查看 复制代码
define e = Character("艾琳", what_prefix="呜嗯呜嗯", what_suffix="是也")

这样的话,角色的对话内容在开头会自动添加上“呜嗯呜嗯”(不包含引号),结尾会自动添加上“是也”(不包含引号)。这个功能可以为带有“口癖”的角色省下一些事。

当然,不可能仅仅这点小功能就被我单独拿出来当作骚操作的~前缀和后缀是支持字符串内插(interpolate)图片的!内插(interpolation)翻译成大白话就是说:表面上是个字符串,实际上根本不会显示或者显示为其他东西。

举例来说,我们有个雪花的图片,名叫 “snowflake.png”。开头先定义一个image:
[RenPy] 纯文本查看 复制代码
image end_pic:
    "snowflake.png"
    size (16, 16)
    block:
        rotate 0
        linear 2.0 rotate 360
        repeat

图像(image)定义以后会说的,如果我们都还没有放弃的话……

为了骚,我让这个雪花图片以“2秒1圈”的速度顺时针旋转。然后再定义角色的对话内容后缀:
[RenPy] 纯文本查看 复制代码
define e = Character("Eileen", what_suffix="{image=end_pic}")

然后,角色“e”的对话内容结尾都会有一个旋转的雪花图片了~
[RenPy] 纯文本查看 复制代码
label main_menu:
    return

label start:

    e "嗯哼~"

也可以使用别的图像,比如多帧图片、各种缓动函数加alpha渐变等。

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

预告部分:下一篇应该是图像(image)定义。图像这个东西吧……单纯显示一张图片实在没多多少内容好说,如果要骚起来就不得不说ATL(Animation and Transformation Language),于是各种语法再说一下就……脑仁疼,想放弃……



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

本版积分规则

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

GMT+8, 2019-12-10 12:29 , Processed in 0.105225 second(s), 27 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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