Ren's Py 中文文档翻译计划--入门

入门

快速开始

欢迎来到 Ren'Py 快速开始手册。该手册的目的就是向您展示如何从零开始,通过几个简单的步骤,制作一个 Ren'Py游戏。我们将通过制作一个简单的游戏,The Question。同时手册也包含了多个例子,都作为游戏demo的一部分。

Ren'Py 启动器

在制作游戏之前,您应该先花一些时间学习一下 Ren'Py 启动器是如何工作的。启动器可以让您创建,管理,编辑以及运行 Ren'Py 项目。

开始

第一步你需要下载 Ren'Py

下载成功之后需要解压 Ren'Py。通常可以通过右键点击压缩包文件,选择 Extract 或直接 Open。通过提示,您将会得到一份Ren'Py的工作拷贝。

注意

请务必将Ren'Py解压到硬盘上的文件夹或工作目录。如果您在压缩包中运行,将会出现运行问题。

一旦您解压成功Ren'Py,您就可以运行它了。

  • 在Windows操作系统,运行 renpyrenpy.exe 程序

  • 在Mac OS X操作系统,运行 renpy 应用

  • 在Linux操作系统,运行 renpy.sh 脚本

在此之后,Ren'Py启动器应该已经运行。

Ren'Py启动器已经被翻译成多种语言,您可以在preferences中选择您喜欢的语言使用。

选择并启动一个项目

首先你可以先看看完整的 The Question 游戏。打开Ren'Py启动器并选择 The Question。点击 Lauch Project启动游戏。

launcher

同时您也可以选择 Tutorial 来启动游戏demo。

创建新项目

点击 Create New Project 来创建新项目。启动器将会要求您输入项目名,如 My Question Project ,并需要您选择项目及色彩主题。色彩主题无关紧要,您只需选择您喜欢的就行了。

简单的游戏

label start:  
    "I'll ask her..."

    "Me" "Um... will you..."
    "Me" "Will you be my artist for a visual novel?"

    "Silence."
    "She is shocked, and then..."

    "Sylvie" "Sure, but what is a \"visual novel?\""

这可能是最简单的 Ren'Py 游戏了。不包含任何画面,只含有两个角色的对话。

您可以尝试这段代码,在启动器中选择新建的 My Question Project, 在编辑文件下点选 script.rpyRen'Py 可能会要求您选择乘手的编辑器。当下载好您首选的编辑器,script.rpy 将会在编辑器中打开。将原先文件中带有的内容删去,重新开始。将以上的代码复制进 script.rpy,并保存。

这样您就准备好运行这个样例了。返回启动器,选择 Launch ProjectRen'Py将会启动。注意,在没有做其他工作的前提下,Ren'Py已经给您目录并且允许您载入和保存游戏,更改个人偏好。当您准备好了,点击 Launch Project, 就可以玩实例游戏了。

例子中展示了一些 Ren'Py 常用的语句。

第一行是一个标签语句。标签语句用来对程序的一个地方给予命名。在本例中,我们创建一个名为 start 的标签。start 标签是特殊的,当玩家点击主菜单中的 Start Game 之后开始运行的脚本。

另一行是一个话语语句。话语语句有两种形式。第一种就是一行字符串(由双引号打头,包含字符并以双引号结尾),用于叙述或者描述主角的思绪。第二种方式包含两个字符串,用于对话,第一个字符串代表的是角色名,第二个字符串代表说话的内容。

所有的话语语句都要在前面缩进四个空格。这是因为他们是在一个标签语句之下的代码块。在 Ren'Py 中,代码块必须在前面的语句之后缩进,所有代码块中的语句都要缩进相同的长度。

当字符串中包含双引号的时候,这些字符需要一个反斜杠来处理。在我们的示例中的最后一行就体现了这个用法。

虽然这个简单的游戏无眼睇,不过也是一个例子来体现用 Ren'Py 制作游戏是多么容易。我们会逐渐增加图片,不过首先我们还是先看看如何声明角色。

初始化

初始化语句在 Ren'Py 脚本执行之前执行。初始化代码块用于定义图片和角色,设定不变的的游戏数据结构和自定义 Ren'Py 。初始化代码块中不应该与用户互动或改变任何层级,也不能包含任何话语,菜单,场景,显示或隐藏语句,同时也不该调用能执行以上内容的语句。

一个初始化语句由关键字 init 引入,后面跟着可选的优先级数字和一个必填的分号。如果未指定优先级数字,默认由0代替。优先级数字范围为-999至999。超出这部分的数字在 Ren'Py 中作保留。

优先级数字用于指定初始化代码块中代码的执行。初始化代码块从低到高优先级执行代码。在一个文件中,相同优先级的初始化代码从上到下执行,不同文件中相同优先级的执行顺序未定义。

初始化代码块只会在特殊初始化层执行一次。当普通执行控制到达初始化代码块底部时,该代码块的执行将会停止。如果在普通执行时遇到初始化语句,初始化代码块并不会运行,而是跳过初始化代码块继续执行。

角色

在例子中有个问题,就是每次对话的时候都需要重复打印角色名字。在对话繁多的游戏中,要增加许多输入。并且,所有的角色的名字显示都是相同样式。为了解决这个问题, Ren'Py 可以让您提前定义角色。可以用单个字符代替角色,并改变角色名字的颜色。

define s = Character('Sylvie', color="#c8ffc8")  
define m = Character('Me', color="#c8c8ff")

label start:  
    "I'll ask her..."

    m "Um... will you..."
    m "Will you be my artist for a visual novel?"

    "Silence."
    "She is shocked, and then..."

    s "Sure, but what is a \"visual novel?\""

第一行和第二行定义了角色。第一行用一个字符 s 代替长名 Sylvie, 用绿色表示。第二行用一个字符 m 代替长名 Me, 用红色表示。其他角色也可以用相同的方式处理。

我们用字符对象来代替角色名称字符串,这就告诉 Ren'Py 使用我们在初始化代码块中的字符。

图片

没有图片不成视觉小说。我们向有犀利加一些图片吧。

image bg meadow = "meadow.jpg"  
image bg uni = "uni.jpg"

image sylvie smile = "sylvie_smile.png"  
image sylvie surprised = "sylvie_surprised.png"

define s = Character('Sylvie', color="#c8ffc8")  
define m = Character('Me', color="#c8c8ff")

label start:  
    scene bg meadow
    show sylvie smile

    "I'll ask her..."

    m "Um... will you..."
    m "Will you be my artist for a visual novel?"

    show sylvie surprised

    "Silence."
    "She is shocked, and then..."

    show sylvie smile

    s "Sure, but what is a \"visual novel?\""

我们在初始化代码块中的1, 2, 4, 5行声明了图片。这些图片都被赋予了一个图片名,通过这些名字可以找到图片文件名。

举个例子,第四行定义了图片名为 sylvie smile, 文件名为 sylvie_smile.png, 标签是 sylvie

在11行有一个 scene 语句。该语句先清屏,然后显示 bg meadow 图片。下一句是一个 show 语句,显示 sylvie smile 图片在屏幕上。

图片名的第一部分是图片标签。如果一个图片将会替代掉相同标签的已显示在界面上的图片。在第18行的第二个 show 语句, sylvie surprised将会替换掉 sylvie smile

Ren'Py 寻找图片需要从当前项目的游戏目录开始查询。游戏目录可以在 *Project-Name*/game/路径下找到。

Ren'Py 没有对角色图片和背景图片作区别。总的来说,角色图片需要有透明背景,建议是 PNGWEBP 格式。背景图片可以是 JPEG, PNG 或者 WEBP。背景图片一般用 bg 来做标签。

Ren'Py 也支持hide 语句。

label leaving:

    s "I'll get right on it!"

    hide sylvie

    "..."

    m "That wasn't what I meant!"

show 语句可以在角色更改表情的时候使用替换, scene 语句可以用于所有角色离场。你只需要在单个角色离场的时候使用 hide 语句。

变换

只是单纯的移入和移除显得特别单调, Ren'Py 也支持变换。变换在最后一个互动(对话,菜单或变换)后生效。

label start:  
    scene bg uni
    show sylvie smile

    s "Oh, hi, do we walk home together?"
    m "Yes..."
    "I said and my voice was already shaking."

    scene bg meadow
    with fade

    "We reached the meadows just outside our hometown."
    "Autumn was so beautiful here."
    "When we were children, we often played here."
    m "Hey... ummm..."

    show sylvie smile
    with dissolve

    "She turned to me and smiled."
    "I'll ask her..."
    m "Ummm... will you..."
    m "Will you be my artist for a visual novel?"

with 语句的使用带上一个变换。最常用的就是 dissolve, 从一个图片溶解变换到下一个。另一个常用的是 fade,将屏幕黯淡至黑色,并再黯淡展示新的场景。

场景显示和图片显示可以一次应用多个或者分别指定。

一齐指定的案例:

    scene bg meadow
    show sylvie smile
    with dissolve

分别指定的例子:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve
位置

默认图片是出现在水平中央的,下边靠着屏幕底端。对于北京和单个角色来说没有问题,但多角色的时候就希望放在其他位置。也可以根据故事的合理性将角色放置在不同地方。

     show sylvie smile at right

show 语句之后加个 at 从句表示位置。有left , right, centertruecenter 可选。

音乐和音效

大多数游戏播放背景音乐。音乐由 play music 语句播放。参数可以由单个文件名或一系列的文件名组成。多个文件名按照顺序播放。

    play music "illurock.ogg"
    play music ["1.ogg", "2.ogg"]

当改变音乐时,可以应用淡入淡出从句,例如:

    play music "illurock.ogg" fadeout 1.0 fadein 1.0

如果提供了 loop 从句,音乐便会循环。提供 no loop 从句,播放结束便会停止。

    play music "illurock.ogg" loop
    play music "illurock.ogg" noloop

可以直接使用 stop 语句停止音乐, 也可以添加淡出从句。

    stop music

播放音效也是同理,默认也是没有循环的。

    play sound "effect.ogg"

Ren'Py 支持多种格式,不过 OGG 是最好的。图片,音乐和音效都必须要放在游戏目录下。

暂停状态

暂停状态使 Ren'Py直到下次鼠标点击之前都暂停。pause 语句后面可接一个数字,代表暂停的秒数。

结束游戏

使用 return 语句结束游戏,不需要附带任何参数。这么做之前最好在游戏内表明,或给玩家一个结束数字或结束标识。

    ".:. Good Ending."

    return
菜单,标签和跳过

menu 语句用于提供用户选单:

    s "Sure, but what's a \"visual novel?\""

menu:  
    "It's a story with pictures.":
         jump vn

    "It's a hentai game.":
         jump hentai

label vn:  
    m "It's a story with pictures and music."
    jump marry

label hentai:  
    m "Why it's a game with lots of sex."
    jump marry

label marry:  
    scene black
    with dissolve

    "--- years later ---"
Pythonif 语句

简单的游戏可以只用 menujump 语句,不过来将用户的选择存储在变量里也是有必要的,并且在之后也有可能还要用到。所以 Ren'Py 支持 Python 语句。

可以用两种方式获得 Python 支持。一种是在一行开头以 $ 符号起始。 Python 使存储变量变得方便, 可以在游戏开始的时候初始化变量。

label start:  
    $ bl_game = False

你可以在所选的菜单中改变变量:

label hentai:

    $ bl_game = True

    m "Why it's a game with lots of sex."
    s "You mean, like a boy's love game?"
    s "I've always wanted to make one of those."
    s "I'll get right on it!"

    jump marry

之后还可以做检查

"And so, we became a visual novel creating team."
"We made games and had a lot of fun making them."

if bl_game:  
    "Well, apart from that boy's love game she insisted on making."

"And one day..."

python 变量不只是布尔变量,也可以是任意的python变量。 Ren'Py 内可以使用整个 Python 语言。

发布您的游戏

一旦您完成了一个游戏,在发布游戏之前有几个步骤是应该做的:

更新到最新版 Ren'Py

新版的 Ren'Py 会定期发布,修复一些bug和增加一些新特性。在发布游戏之前,点击启动器中的update 来更新。

检查脚本

在启动器前页,点击 Check Script(Lint)。这将会检查您游戏中可能影响到用户体验的错误。可能这些错误会发生在 Mac 或 Linux操作系统中,所以修复他们是有必要的,即使您的电脑上并没有错误。

构建发行版

在启动器前页,选择 Build Distributions。基于 options.rpy 中的信息,启动器将会构建一个或多个您的游戏包。

测试

Lint 并不是测试的替代。在发布之前自我测试时您的责任。您可以请您的朋友帮忙进行beta测试,并且您能通过他们发现一些您发现不了的错误。

发行

您可以将您生成的文件(Windows, Mac 和Linux)上传到网络,并发布下载地址。恭喜您,您已经发布了一款游戏。

请将您发布的游戏添加到我们的游戏库,这样我们就能跟踪 Ren'Py 制作的游戏。