RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 255|回复: 0

快速入门(新)

[复制链接]
发表于 2018-4-15 15:49:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 BuErShen 于 2018-4-13 19:32 编辑

快速入门 翻译:被诅咒的章鱼)
欢迎来到Ren’Py快速入门手册。此手册意在指导你如何从零起步,经过一系列简单的步骤制作一个Ren’Py游戏。通过制作一个简单游戏 The Question,我们将实现这点。

Ren’Py启动器
在开始制作一个游戏之前,你最好首先花点时间学习Ren’Py启动器的工作机制。启动器允许你创造、管理、编辑和运行Ren’Py项目。

正式开始。 正式开始时,你会需要 下载Ren’Py

下载了Ren’Py,然后解压并运行。

  • 在Windows平台上,双击下载的可执行文件。它会自动解压Ren’Py到一个命名方式为 renpy-<version> 的文件夹。进入这个文件夹并运行 renpy.exe 。(在扩展名隐藏的情况下,renpy.exe文件可能名字是renpy)
  • 在Max OS X平台上,双击下载驱动器镜像,将其挂载为一个驱动器。当驱动器打开后,将目录命名为 renpy-<version> 并复制到其他任意地方。(复制到哪里不重要,但不能是只读驱动器。不要将renpy程序文件移动到其所有目录之外的地方——不然在其他地方程序无法工作)进入这个目录并运行 renpy 程序。
  • 在Linux平台上,解tar包,进入 renpy-<version> 目录,然后运行 renpy.sh

完成以上操作后,Ren’Py启动器应该正常运行了。

Ren’Py启动器已经被翻译为多种语言。需要更改语言的话,选择底部右侧的“preferences”项,就可以更改语言了。

选择和启动一个项目。 你首先会看到游戏“The Question”完成之后的样子。进入Ren’Py启动器,在弹出的第一个窗口选择“The Question”。然后选择“Launch Project”进入“The Question”。

通过同样的操作,你可以回到Ren’Py演示样例选项,不过请选择“Tutorial”而不是“The Question”。

Ren’Py启动器主界面。
launcher.png

命名一个新项目。
project_name.png

选择项目分辨率。
resolution.png

选择默认主题的强调颜色和背景颜色。
color.png

创建一个新项目。 在启动器页面选择“Create New Project”创建一个新项目。

如果这是你第一次创建项目,Ren’Py可能会要求你选择一个项目目录。这个目录(或者称为文件夹)会被用于创建新的项目,并且会扫描已经存在的项目。目录选择窗口会在Ren’Py主界面上弹出,找到并确认这个窗口。

然后,启动器会询问项目名称。“The Question”已经被占用了,你需要输入一个有点不同的,比如“My Question”,然后输入回车确认。

之后,启动器会询问项目分辨率。考虑到游戏(文件)大小和游戏画面质量,默认的1280x720分辨率是个良好的折中方案。由于是入门演示,我们将选择1280x720以匹配“The Question”游戏的美术资源,点击“Continue”。

启动器将继续询问颜色主题——新GUI(用户图形界面)的强调色和背景色。此时你选择什么颜色都不要紧,所以随心所欲选择,然后点击“Continue”。

到了这一步,Ren’Py会处理一些(后台)工作,然后输出一个简单的游戏模板。该模板使用预置的美术和文本资源,但是可以运行的,并且支持一些预期的特性,例如回滚、读档、存档等。选择“Launch Project”运行这个项目。

一个简单游戏

[RenPy] 纯文本查看 复制代码
label start:

    "Sylvie" "Hi there! How was class?"

    "Me" "Good..."

    "I can't bring myself to admit that it all went in one ear and out the other."

    "Me" "Are you going home now? Wanna walk back with me?"

    "Sylvie" "Sure!"

这是一个非常简单的Ren’Py游戏。它不包含任何图片和音乐,但它展示了两个角色之间的一次对话,以及一行解说。

如果想要尝试,从启动器顶端选择“My Question”项目,进入“Edit File”并选择“script.rpy”。如果这是你首次进入编辑模式,Ren’Py会询问选用哪一款编辑器(我们向新人推荐Editra),并下载你选择的那款。启动器会使用编辑器打开rpy脚本文件。

编辑器打开后,清除script.rpy里所有内容。我们将从零开始,所以你不需要原来的那些内容。将上面案例复制到script.ry里并保存文件。

现在万事俱备,可以运行这个样例了。回到启动器主界面,选择“Launch Project”。Ren’Py会启动运行。注意,不需要额外的工作量,Ren’Py就已经提供了可以读档和存档以及改变配置项的菜单选项。当这些工作都完成时,点击“Launch Project”,就可以玩这个样例游戏了。
这个样例展示了一些常用的Ren’Py语句。

第一行是一个label(标签)语句。label(标签)语句常用语在程序中给某个地方命名。在这个例子中,我们创建了一个名为 start 的标签。start标签是特殊的,因为当用户点击主菜单的“Start Game”时,Ren’Py脚本会从这个标签开始运行。

其他行是say(说话)语句。说话语句有两种格式。一种格式是,一行单独字符串(双引号开头,双引号结束,中间文字),用于表现主视角人物的陈述或者内心想法。另一种格式有两个字符串组成。常用于对话,第一个字符串是说话人物名字,第二个字符串是该人物正在说的话。

注意,所有说话语句都要用4个空格(半角)缩进.这是因为说话语句属于同一个标签语句下的段落。在Ren’Py中,段落必须相对于从属的主语句缩进,并且同一个段落的语句使用同样的缩进量。

当文本自身包含双引号时,需要使用反斜行作为转义符。例如
[RenPy] 纯文本查看 复制代码
"Sylvie" "Did you ever hear Lincon's famous saying, \"The problem with Internet quotations is that many of them are not genuine.\""

当然这个简单游戏没什么可多看的,它只是一个演示如何在Ren’Py里简单构建框架的样例。之后我们会添加一些图片,不过首先,让我们看看如何定义角色。

Character(角色)
在第一个样例里存在一个问题,每当角色说话时,你需要反复输入角色名字。在一个对话为主的游戏中,这可能是很繁重的工作。还有,游戏启动后角色名字始终会以强调色显示。为了解决这些问题,Ren’Py允许你在开头就定义角色。这允许你使用一个短名关联一个角色,并且能够改变角色名字的颜色。
[RenPy] 纯文本查看 复制代码
define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")

label start:

    s "Hi there! How was class?"

    m "Good..."

    "I can't bring myself to admit that it all went in one ear and out the other."

    s "Are you going home now? Wanna walk back with me?"

    m "Sure!"

第一和第二行语句定义了角色。第一行定义一个短名为“S”,长名为“Sylvie”的角色,名字颜色为淡绿色。(如同网页里常见的,这里的颜色使用RGB的16进制字符表示)

第二行创建一个短名为“m”,长名为“Me”的角色,名字颜色为淡红色。其他角色的定义可以使用“复制-粘贴”,修改角色的长名、短名和名字颜色。

我们也已经使用角色对象代替了角色名字字符串。这会告诉Ren’Py使用我们定义的对应角色。

Image(图像)
一个视觉系小说如果没有图片的话就称不上视觉系小说了。在“The Question”里还有另外一个场景。这也包含了一些语句展现角色图像。如果你想尝试的话,用这段内容完全覆盖之前那个脚本。
[RenPy] 纯文本查看 复制代码
define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")

label start:

    scene bg meadow

    "After a short while, we reach the meadows just outside the neighborhood where we both live."

    "It's a scenic view I've grown used to. Autumn is especially beautiful here."

    "When we were children, we played in these meadows a lot, so they're full of memories."

    m "Hey... Umm..."

    show sylvie green smile

    "She turns to me and smiles. She looks so welcoming that I feel my nervousness melt away."

    "I'll ask her...!"

    m "Ummm... Will you..."

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

    show sylvie green surprised

    "Silence."

界面中的所有图像,都会显示在同一个画面上。这段脚本介绍了两种新的语句。第6行的scene(场景)语句清除了所有图像并显示了一个背景图像。从第16行至第26行的展示语句在背景上显示了一个sprite(精灵), 并根据预设改变展示的精灵。

在Ren’Py中,每个图像都有一个名字。该名字包含一个tag(标签,与label标签不同),以及一个以上的可选attribute(属性)。tag标签和属性名必须以字母开头,包含字母、数字和下划线。例如:

  • 第6行的scene(场景)语句中,tag标签是“bg”,属性是“meadow”。按照习惯,背景图像应该使用的bg作为tag标签。
  • 第16行的第一个展现语句中,tag标签是“sylvie”,属性是“green”和“smile”。
  • 第26行的第二个展现语句中,tag标签是“sylvie”,属性是“green”和“surprised”。

给定tag标签时,每次只能展示一副图像。当拥有同样tag标签的第二副图像需要展示时,它会替换第一副图像,如同在第26行里发生的情况。

Ren’Py会在image目录下搜索图像文件,可以通过启动器的“Open Directory”选项里选择“image”完成配置。Ren’Py能使用PNG或者WEBP文件作为角色美术资源,JPG、JPEG、PNG或者WEBP文件作为背景美术资源。文件命名非常重要——扩展名被删除,文件名强制小写,是对引用文件的要求。

例如,下面这些文件被放置在images目录下,定义了如下图像。

  • “bg meadow.jpg” -> bg meadow
  • “sylvie green smile.png” -> sylvie green smile
  • “sylvie green surprised.png” -> sylvie green surprised


因为文件名会被小写化,所以下面这种方式也可行。

  • “Sylvie Green Surprised.png” -> sylvie green surprised


图像可以被放置在images目录的子目录(子文件夹)中。目录名被忽略,只有文件名被用来定义图像名。

hide(隐藏)语句。
Ren’Py也支持hide(隐藏)语句,可以用来隐藏图像。
[RenPy] 纯文本查看 复制代码
label leaving:

    s "I'll get right on it!"

    hide sylvie

    "..."

    m "That wasn't what I meant!"

实际上,你需要使用hide(隐藏)语句的情况非常少见。展现语句能用在角S***Q感变化,而scene(场景)语句用在所有人离开的情况。当某个角色离开但场景不变化时,你才需要使用hide(隐藏)语句。

image(图像)语句。有时候,制作者可能不想让Ren’Py自动定义图像。这时image(图像)语句就能派上用场。它应该出现在文件最顶层(不缩进,在label标签前面),为图像文件指定对应的图像名字。例如:
[RenPy] 纯文本查看 复制代码
image logo = "renpy logo.png"
image eileen happy = "eileen_happy_blue_dress.png"

image(图像)语句于初始化阶段就会运行,早于label标签开始以及其他的游戏脚本与玩家交互。

image(图像)语句也用于比较复杂的任务,但我们会在 其他地方 讨论这部分。

Transition(转场)
在上面的脚本中,图片的切换十分生硬。由于切换地点或者人物的出场、离场很重要,Ren’Py支持图像的各种转场效果。

转场切换用于显示在最后一个交互(对话、菜单或来源于其他语句的转场)发生后,到下一个scene(场景)、show(显示)或hide(隐藏)语句运行显示之间。

[RenPy] 纯文本查看 复制代码
label start:

    scene bg meadow
    with fade

    "After a short while, we reach the meadows just outside the neighborhood where we both live."

    "It's a scenic view I've grown used to. Autumn is especially beautiful here."

    "When we were children, we played in these meadows a lot, so they're full of memories."

    m "Hey... Umm..."

    show sylvie green smile
    with dissolve

    "She turns to me and smiles. She looks so welcoming that I feel my nervousness melt away."

    "I'll ask her...!"

    m "Ummm... Will you..."

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

这里的with语句决定了需要使用的转场效果名。最常用的转场效果是dissolves(融化)。另一个有用的转场效果是fade(褪色),能让界面褪为全黑,然后逐渐亮起成新的界面。

当在多个scene(场景)、show(展现)、hide(隐藏)语句之后有一个转场效果,将对以上所有语句都有效。如果你写成这样:
[RenPy] 纯文本查看 复制代码
    scene bg meadow
    show sylvie green smile
    with dissolve

“bg meadow”和“sylvie green smile”图像会同时使用dissolve转场。如果想要每次只融化其中之一,你需要写两个转场语句:

[RenPy] 纯文本查看 复制代码
    scene bg meadow
    with dissolve
    show sylvie green smile
    with dissolve

场景meadow里有第一个融化效果,而角色sylvie里有第二个融化效果。如果你想要立刻展现meadow场景,然后使用转场效果展现角色sylvie,你可以这样写:
[RenPy] 纯文本查看 复制代码
    scene bg meadow
    with None
    show sylvie smile
    with dissolve

这里的“None”被用于标识一个特殊转场效果,对玩家来说主界面没有发生任何特殊效果。

Position(位置)
图像在展示时默认水平居中,图像底部与界面底部相接。这样设计通常对背景和单个角色没问题,但当界面上需要展现1个以上角色时,重新调整图像位置也是十分合理的。同样,基于剧情需要,调整单一角色的图像位置也可以理解。
[RenPy] 纯文本查看 复制代码
     show sylvie green smile at right

为了重新调整图像位置,需要在show(展现)语句中添加一个at分句。at分句指定了图像的展示位置。Ren’Py中包含了多个域定义的位置关键字:  left 表示界面左端, right 表示屏幕右端, center 表示水平居中(默认位置), truecenter 表示水平和垂直同时居中。

创作者可以自己定义位置关键字,甚至复杂的位置移动,不过那超过了本章“快速入门”的范畴。

Music(音乐)和Sound(音效)
大多数Ren’Py游戏都会播放背景音乐。音乐播放需要使用play music(播放音乐)语句。play music语句将语句中指定的文件名识别为一个音频文件并播放。音频文件名被识别并关联到游戏所在目录。音频文件应该是opus、ogg vorbis或者mp3格式的文件。

举例:
[RenPy] 纯文本查看 复制代码
    play music "illurock.ogg"

更换音乐时,我们可以使用一个fadeout and fadein(淡入淡出)分句,fadeout and fadein(淡入淡出)分句用于旧音乐的淡出和新音乐的淡入。
[RenPy] 纯文本查看 复制代码
    play music "illurock.ogg" fadeout 1.0 fadein 1.0

queue music(音乐排队)语句标识,在当前音乐播放完毕后接着播放的音频文件。
[RenPy] 纯文本查看 复制代码
    queue music "next_track.opus"

音乐播放可以使用stop music(音乐停止)语句停止,这个语句也可选用fadeout(淡出)分句。
[RenPy] 纯文本查看 复制代码
    stop music

音效可以使用play sound(播放音效)语句来播放。与音乐不同,音效不会循环播放。
[RenPy] 纯文本查看 复制代码
    play sound "effect.ogg"

Pause(暂停)语句
pause(暂停)语句可以让整个Ren’Py进程暂停,直到出现鼠标单击事件。
[RenPy] 纯文本查看 复制代码
    pause

如果pause语句中给定一个数字,就只会暂停数字对应的秒数。
[RenPy] 纯文本查看 复制代码
    pause 3.0

结束游戏
通过运行return(回归)语句,你可以结束游戏,而不需要做其他任何事。在此之前,最好设置一些东西能够提示游戏已经结束,并且可能的话给用户一个结局数字或者结局名称。
[RenPy] 纯文本查看 复制代码
    ".:. Good Ending."

    return

这就是你制作一个动态小说所需要做的,动态小说是指没有任何分支选项的游戏。现在,我们将关注如何在游戏中为用户提供菜单。

Menu(菜单),Label(标签)和Jump(跳转)
menu(菜单)语句能够给玩家提供一个分支选项:
[RenPy] 纯文本查看 复制代码
    s "Sure, but what's a \"visual novel?\""

menu:

    "It's a videogame.":
        jump game

    "It's an interactive book.":
        jump book

label game:

    m "It's a kind of videogame you can play on your computer or a console."

    jump marry

label book:

    m "It's like an interactive book that you can read on a computer or a console."

    jump marry

label marry:

    "And so, we become a visual novel creating duo."

这个例子展示了在Ren’Py中如何使用menu(菜单)语句。menu语句提供了一个游戏内的分支选项。menu语句使用一段缩进的文字,每一段文字后都跟着一个冒号。这段文字描述是提供给玩家的选项。每一个选项下面一行的缩进文字,是选择之后对应选项后会运行的脚本内容。

在这个例子中,两个选项中各运行一个jump(跳转)语句。jump语句将控制转换至label(标签)对应的label语句。在跳转后,脚本会执行label下的语句。
在上面的例子中,Sylvie提出她的问题后,玩家会面临“二选一”的分支选项。如果玩家选择“It’s a videogame.”,第一个jump(跳转)语句会执行,Ren’Py会跳转到 game label(标签)脚本位置。这会引发主视角角色说“It’s a story with pictures and music.”,然后Ren’Py将跳转到 marry label(标签)。

如果label(标签)后面相关的段落之后没有jump(跳转)语句,Ren’Py会顺序执行后面的语句。最后的jump(跳转)语句在技术上不是必须的,不过带上一个会让游戏流程显得更清晰。

laber(标签)可以定义在游戏目录中的任意后缀为 .rpy 的文件中。对于Ren’Py来说文件名无关紧要,只有文件里的label(标签)才是重点。你可以认为,所有这些rpy文件的合集等价于一个很大的rpy文件,用于跳转和转换控制。这种设计提供了你“构建一个更庞大游戏”的脚本所需的灵活度。

使用default、Python和if语句支持flag(标识)
上面那些语句已经足以用于制作某些游戏,其他一些游戏则需要保存数据及提取数据。例如,制作者需要游戏记下玩家做出的一个选择,先返回主线流程中,并在后面的流程中根据之前的选择出现对应的游戏变现,这是个合理的需求。这就是Ren’Py支持内嵌Python代码的原因。

这一段,我们将演示如何存储一个flag(标识),该flag(标识)包含了玩家做过的某个选择。我们需要先初始化flag(标识),在label(标签)之前,使用default(默认)语句。
[RenPy] 纯文本查看 复制代码
# True if the player has decided to compare a VN to a book.
default book = False

label start:

    s "Hi there! How was class?"

名为“book”的flag(标识)被初始化为特殊值 False (请注意首字母大写),表示该flag还未被设置。如果label(标识)“book”对应的路径被选择,我们将使用一个Python assignment(Python 断言)语句将其设置为True
[RenPy] 纯文本查看 复制代码
label book:

    $ book = True

    m "It's like an interactive book that you can read on a computer or a console."

    jump marry

以美元标志符“$”开头那行文本会被识别为Python语句。assignment(断言)语句将这里的“book”判定为一个变量而不是一个值。Ren’Py已经支持一些其他包含Python代码的办法,例如多行的Python语句。我们将在本手册的其他章节讨论这点。

需要检查flag(标识)时,请使用if语句:
[RenPy] 纯文本查看 复制代码
if book:

    "Our first game is based on one of Sylvie's ideas, but afterwards I get to come up with stories of my own, too."

如果结果为True(真),if语句下的脚本段落将执行。相反,if语句下的脚本段落将被跳过。if语句也可以包含一个else分句,当if结果为假时,将执行else分句中的脚本段落。
[RenPy] 纯文本查看 复制代码
if book:

    "Our first game is based on one of Sylvie's ideas, but afterwards I get to come up with stories of my own, too."

else:

    "Sylvie helped with the script on our first video game."

Python变量不仅仅可以是简单的布尔值。变量也可以存储玩家名字、分数或者其他一些想要记录的事情。由于Ren’Py支持Python编程语言的所有功能,许多想法都可能实现。

release(打包释出)你的游戏
一旦你制作了一个游戏,在你打包释出它之前还有一些事情需要完成。

检查Ren’Py版本更新
基线的新版Ren’Py通常会修复bug和添加新特性。打包释出前,你需要在启动器中点击update(更新)以更新到最新版本的Ren’Py. 你也可以手动下载新版本并查看版本更新列表,以上工作可以使用这个页面 https://www.renpy.org/latest.html

少数情况下,Ren’Py版本升级变更后会要求你修改原来的游戏脚本。https://www.renpy.org/doc/html/incompatible.html 页面列出了这些变更明细。

检查脚本
在启动器的前部页面,选择“Build Distributions”。基于options.rpy文件中的信息,启动器会建立一个或多个包含你所制作游戏的归档文件。

测试
lint代码检查工具不能替代完整的使用测试。在打包释出你的游戏之前,你有责任进行检查。可以考虑请求你的朋友们帮忙进行beta测试,测试者往往能发现你未能发现的问题。

打包释出
一旦游戏完成并通过测试,你可以将生成的归档文件上传到网上,好让别人能发现它们。(如果你没有自己的网站,试试https://itch.io,该站点里有一大票视觉系小说。)恭喜,你已经完成了人生中的第一部视觉系小说!
还有几个地方可以发布游戏信息:



“The Question”的游戏脚本
你可以在 这里 查看完整的“The Question”游戏脚本。

离开这里之后我们可以去哪里进一步学习?
从零开始的快速入门只是Ren’Py功能的惊鸿一瞥。限于篇幅原因,我们省略了很多Ren’Py支持的特性,并尽可能地做出简化——专注于“制作一部视觉系小说”的最小功能特性集。

想要感受Ren’Py所有功能的话,请玩一些演示游戏,以及可能的话通过网站 Ren’Py website 了解一些游戏特性。你也可能会想要阅读本手册的其他内容,从GUI(用户图形界面)定制向导开始吧。

除此之外,我们推荐你看看 Lemma Soft Forums 论坛的Ren’Py版块,该版块里有三个子版块,分别用于问答、各类库的使用手册以及可以用于二次开发的样例。Lemma Soft Forums论坛是Ren’Py的交流中枢,我们非常欢迎新近入坑的创作者以及他们带来的问题。

感谢你选择Ren’Py视觉系小说引擎。我们期待着您使用其创造作品的那一天!



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2018-10-16 11:23 , Processed in 0.039072 second(s), 23 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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