世上无难事,只要肯放弃。
支线系列是独立于基础之外的内容,会使用一些犄角旮旯的知识点,感觉有困难的同学可以暂时不(fang)看(qi)。
本篇内容将涉及脚本标签(label)、图片的显示与隐藏、视频播放和renpy函数等。请善用官方文档的搜索功能,能解决大部分疑问。
第一个问题:默认的主菜单(main menu)太丑了,能不能换?怎么换?
答:当然可以换。那部分内容预计在后续的自定义GUI部分细说。
第二个问题:想要在主菜单(main menu)之前播放几个LOGO,该怎么弄?
答:启动开场不放LOGO,就跟去星巴克买咖啡不自拍不发朋友圈一样!咳咳,总体来说是个简单的事情。
首先简要介绍脚本标签(label)。label可以用在任何rpy脚本文件中,可以理解为某一段脚本的索引。新建工程会根据模板生成一个名叫“start”的label。主菜单(main menu)点击“启动”或“开始”后,就会从“start”开始顺序执行脚本内容。所以,我们现在需要做的,就是在start脚本标签之前搞点事情~
Ren'Py中自带了几个默认的文本标签,是在主菜单(main menu)界面之前执行的。
详情可参考如下链接:Labels & Control Flow — Ren'Py Documentation
或者中文版:脚本标签(label)和主控流程 — Ren'Py 中文文档
此处可用的特殊文本标签有3个:splashscreen、before_main_menu和main_menu。这3个文本标签在新建工程生成的脚本中并不存在(screen.rpy中的main_menu是screen名,不是label名,请勿混淆)。
我们可以在工程自动生成的任意一个rpy文件中添加这些文本标签,或者可以自己新建一个rpy文件并添加这些文本标签。
甚至我们可以修改 renpy-7.1.3-sdk\launcher\game\tl\simplified_chinese\script.rpym 文件,以后新建工程中就带有这些文本标签。为了方便起见,这次我都在加在了 script.rpy 文件中。
开头先写把文本标签写上:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
# 开场画面
label splashscreen:
pass
# 主菜单之前
label before_main_menu:
pass
# 主菜单
label main_menu:
pass
|
pass语句是用来占位,不会做任何事。在 script.rpy 文件中添加这些文本标签后,启动工程就会发现,开头的主菜单(main menu)被跳过了,直接进入了 “start”标签中。这个问题我们后续再处理。
继续logo显示……把需要显示的logo图片放入工程目录中的images子目录,然后重命名为“logo.png”或者“logo.jpg”(注意文件名不能使用中文)。修改“splashscreen”脚本标签:
1
2
3
4
5
|
label splashscreen:
show logo at truecenter with Dissolve ( 2.0 )
pause 1.0
hide logo with Dissolve ( 2.0 )
|
这里使用的show语句带两个分句来调整位置和使用转场(transition),pause语句暂停整个画面1秒,hide语句使用转场(transition)让logo消失。脚本的语法是个学习Ren'Py过程中必然面临的困难,没有什么捷径。我在后续的内容中可能会展开一些官方文档中没有的用法,基础知识还请自行翻阅官方文档。此处不再展开。
这样简单粗暴显示logo的话,背景默认是黑色。如果需要白色或者其他图片作为背景的话,先定义图像(image),使用scene和show语句顺序显示就可以。例如:
01
02
03
04
05
06
07
08
09
10
11
|
# 开场LOGO
image pure_black = "#000"
image pure_white = "#ffffff"
label splashscreen:
scene pure_black
show pure_white with Dissolve ( 2.0 )
show logo at truecenter with Dissolve ( 2.0 )
pause 1.0
hide logo with Dissolve ( 2.0 )
|
这里定义了两个图像(image),采用的是RGB纯色(solid)。也可以使用图片文件替换。具体的方法请参考文中中显示图像(Displaying Images)的部分。
如果需要展示多个logo,就按顺序使用show和hide语句。
第三个问题:按照上面的办法显示的logo,鼠标一点就直接跳过了,有没有办法让logo不能跳过?
答:不能跳过logo的都是坏文明,粉砕する!
办法的确是有的……使用 renpy.pause 函数。
在每一个不想被跳过的scene、show和hide语句后面,都加上一句:
1
|
$ renpy . pause ( 1 , hard = True )
|
开头的刀乐符号($)表示后面是一个python函数,入参的数字1表示持续(event)的时间为1秒,hard为True表示鼠标点击不能打断暂停。官方文档对hard赋值为True用法的建议是——Use this sparingly, as it's hard to distinguish a hard pause from a crashing game (谨慎使用,因为很难区分硬性暂停和程序卡死)。
第四个问题:如果想要在开头播放视频的话呢?
答:播放视频的脚本和语法很简单。假设我们需要播放的视频文件名为“opening.webm”,换另一个特殊的脚本标签中:
1
2
3
4
5
|
# 主菜单之前
label before_main_menu:
$ renpy . movie_cutscene ( "opening.webm" )
|
选用 before_main_menu 可以将视频做成主菜单(main menu)的背景循环播放(这里没有演示)。麻烦的地方在于Ren'Py支持的编码格式很有限……具体支持的编码列表请参考官方文档:Movie — Ren'Py Documentation
或者中文文档:影片 — Ren'Py 中文文档
遇到视频不能播放的情况,可以尝试用视频软件重新编码(比如MediaCoder),并调整输出帧率是24fps。
资源部分:
整个工程的下载链接(有些人就在等这个是不是?)
链接:百度网盘-链接不存在
提取码:1e3g
创建的SDK版本为7.1.3,一般来说这部分功能在各个版本都没有兼容性问题,解压到自己的工程目录下就行。