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

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

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

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

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

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

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

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

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

答:在入门的第二篇中,我们新创建工程的模板脚本中见到过这样一句:

[RenPy] 纯文本查看 复制代码
?
1
define = Character("艾琳")


这就是一个角色的最小化定义。其中的“e”是一个变量,也可以看作是角色的别名。后面就可以直接使用“e”,来让角色“艾琳”开口说话:

[RenPy] 纯文本查看 复制代码
?
1
2
"您已创建一个新的 Ren'Py 游戏。"
"当您完善了故事、图片和音乐之后,您就可以向全世界发布了!"


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

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

角色对话内容可以进一步定制化,例如:

[RenPy] 纯文本查看 复制代码
?
1
define = Character("艾琳", who_color="#c8ffc8", window_background="frame.png")


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

接下去的内容是重点——人物立绘。定义人物时可以加上一个图像标签(image tag):

[RenPy] 纯文本查看 复制代码
?
1
define = Character("艾琳"image="eileen")


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

[RenPy] 纯文本查看 复制代码
?
1
2
3
eileen concerned.png
eileen happy.png
eileen vhappy.png


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

角色图像的显示可以使用show语句(详细的内容我们后续会讲),也可以使用“角色名+图片属性(attribute)”的形式同时改变角色图像并显示对话文本。例如:

[RenPy] 纯文本查看 复制代码
?
1
2
3
4
define = Character("艾琳"image="eileen")
label start:
    show eileen happy
    "很高兴认识你。"


可以写成:

[RenPy] 纯文本查看 复制代码
?
1
2
3
define = Character("艾琳"image="eileen")
label start:
    e happy "很高兴认识你。"


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

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

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

[RenPy] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
define = Character("艾琳"image="eileen")
label start:
    """
    学习Ren'Py第一步是看文档。
 
    学习Ren'Py第二步是练习样例。
 
    学习Ren'Py第三步是放弃。
 
    或者……女装!
    """


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

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

我们在定义角色时,可以传入两个参数:what_prefix 和 what_suffix 。例如:

[RenPy] 纯文本查看 复制代码
?
1
define = Character("艾琳", what_prefix="呜嗯呜嗯", what_suffix="是也")


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

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

举例来说,我们有个雪花的图片,名叫 “snowflake.png”。开头先定义一个image:

[RenPy] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
image end_pic:
    "snowflake.png"
    size (1616)
    block:
        rotate 0
        linear 2.0 rotate 360
        repeat


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

为了骚,我让这个雪花图片以“2秒1圈”的速度顺时针旋转。然后再定义角色的对话内容后缀:

[RenPy] 纯文本查看 复制代码
?
1
define = Character("Eileen", what_suffix="{image=end_pic}")


然后,角色“e”的对话内容结尾都会有一个旋转的雪花图片了~

[RenPy] 纯文本查看 复制代码
?
1
2
3
4
5
6
label main_menu:
    return
 
label start:
 
    "嗯哼~"


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

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

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值