Ren'Py引擎从入门到放弃(支线1)——自定义开场画面

Ren'Py引擎从入门到放弃(支线1)——自定义开场画面

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

支线系列是独立于基础之外的内容,会使用一些犄角旮旯的知识点,感觉有困难的同学可以暂时不(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 Flowwww.renpy.org

或者中文版:

脚本标签(label)和主控流程 - Ren'Py 中文文档www.renpy.cn

此处可用的特殊文本标签有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 文件中。

开头先写把文本标签写上:

# 开场画面

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”脚本标签:

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语句顺序显示就可以。例如:

# 开场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语句后面,都加上一句:

$ 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”,换另一个特殊的脚本标签中:

# 主菜单之前

label before_main_menu:

    $ renpy.movie_cutscene("opening.webm")

选用 before_main_menu 可以将视频做成主菜单(main menu)的背景循环播放(这里没有演示)。麻烦的地方在于Ren'Py支持的编码格式很有限……具体支持的编码列表请参考官方文档:

Movie - Ren'Py Documentationwww.renpy.org

或者中文文档:

影片 - Ren'Py 中文文档www.renpy.cn

遇到视频不能播放的情况,可以尝试用视频软件重新编码(比如MediaCoder),并调整输出帧率是24fps。


资源部分:

整个工程的下载链接(有些人就在等这个是不是?)

链接:pan.baidu.com/s/11I2Tgq

提取码:1e3g

创建的SDK版本为7.1.3,一般来说这部分功能在各个版本都没有兼容性问题,解压到自己的工程目录下就行。


预告部分:自定义开场还有小部分内容,需要界面(screen)相关知识点,先鸽着……

编辑于 2019-01-20