RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1466|回复: 0

[旧版文档] 快速入门

 关闭 [复制链接]
发表于 2017-10-24 13:17:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 BuErShen 于 2018-9-17 08:03 编辑

快速入门   
注意
此处为旧版文档,不再更新。

查阅最新Ren’Py简体中文文档,请到下面网址(同步官方)
https://www.renpy.cn/doc/index.html




欢迎来到Ren'Py的新手教程。本教程的目的在于让您只需经过几个简单的学习步骤之后,便可以了解如 何从零开始制作一个Ren'Py游戏。 我们将向您展示一个简单的游戏制作:The Question,开始学习Ren'Py。这份教程里包含了一些简单的游戏示例。
   
Ren'Py启动器      
在开始制作新游戏之前,我们首先应该花点时间来了解Ren'Py启动器是怎样工作的。启动器允许您创建、管理、编辑或运行自己的Ren'Py游戏。
      
现在我们正式开始。
在开始教程之前,您需要先到官网 下载Ren'Py

Ren'Py下载完成之后,接下来就是解压。具体步骤就是,首先右键单击压缩包,然后选择 "解压"即可——如果您没有看见"解压"选项的话,就选择"打开"选项。完成以上的几步,您就拥有了Ren'Py的主程序文件。
              
注意:     
确认您已将Ren'Py解压到硬盘上。如果您直接从压缩包中打开它,Ren'Py将不能正常工作。
      
在解压Ren'Py之后,您可以用以下几种方式来打开并运行它。
      
  • 在Windows上, 直接运行 renpyrenpy.exe这个程序。
  • 在Mac OS X上, 运行 renpy 这个应用程序。
  • 在Linux上, 运行 renpy.sh 这个脚本。
      
如果不出意外的话,Ren'Py启动器应该启动了。

目前Ren'Py启动器已支持多种语言,这里我们选择中文。点击右下角 “preferences”选项,
捕获.PNG

选择“Simplified Chinese”便可完成中文设置。
捕获0.PNG

Ren'Py简体中文界面
捕获1.png

选择启动一个项目。

首先我们应该来看看完成状态的 The Question 游戏是什么样的。 打开启动器,在首页选择 "The Question" 这个游戏。然后点击 "启动工程" 选项启动The Question。      
同样的,您也可以启动Ren'Py的演示游戏。只不过这样是要启动 "Tutorial" 而不是 "The Question"。
      
创建一个新项目。
选择启动器里的 "创建新工程" 选项来创建一个新的项目。之后启动器会提示您输入这个新项目的名称。 但是现在 "The Question" 这个名字已经被占用了, 所以您应该输入另一个与之不同的名字,比如 "My Question"等等。 接下来,启动器会提示您选择游戏的主题颜色。这个选择什么其实都没关系,因为只是选择一些你比较喜欢的东西。在选择好主题颜色后您将返回到启动器首页。

一个简单的游戏示例  

[RenPy] 纯文本查看 复制代码
label start:
    "我会问他..."

    "Me" "嗯…你会…"
    "Me" "你会成为我视觉小说里的角色吗?"

    "沉默"
    "她很惊讶,然后…"

    "Sylvie" "当然啦,可是什么是 \"视觉小说\"呢?"

这应该是最简单的Ren'Py游戏之一了。因为它只是向我们展示了两个角色之间的对话,并没有包含图片或者其他类似的东西。
  
为了完成这样一个游戏,我们先要到启动器里,选择启动 "My Question "工程, 然后从"编辑文件" 下选择 "script.rpy" 。 Ren'Py 将会询问您使用何种文本编辑器打开.rpy文件,并在选择后自动下载所选的编辑器。 完成以上步骤后,script.rpy这个脚本文件将会在文本编辑器中打开。 接下来您需要将script.rpy中的所有内容删除掉,因为我们是从零开始学习,所以不需要原来的那些东西。然后把上面示例的代码复制下来,保存在script.rpy中。
  
现在运行这个示例的所有准备工作都已经完成了。我们回到启动器主页,然后选择 "启动工程"选项。 Ren'Py 主程序将会启动。 现在我们可以注意到,在没有做其他任何的工作的前提下,Ren'Py已经为我们提供了一个自带的存储、读取和设置界面。当准备完成后,点击 "启动工程"按钮, 我们来开始试玩这个例子。

这个例子向我们展示了一些Ren'Py里的常用语句。
  
第一行是一个label命令。label命令作用是用标签来标记脚本中的一个位置。在这个例子里,我们创建了一个名为 start的标签。 start是一个特别的标签,当玩家在游戏主菜单点击 "Start Game" 后,Ren'Py会从 start 标签开始运行脚本。
  
另外一行是say命令。say命令有两种格式。第一种是以一串文字(以半角双引号为起始,其中包含文字,以半角双引号结束)为一行,主要用于陈述或描述角色的心理活动。第二种则是由两个字符串组成,通常用于显示人物对话。其中第一个字符串是用于显示人物名称,第二个字符串则是用于显示人物对话。
  
注意,在上面所有的say命令之前都有四个空格的缩进,这是因为它们都是在label命令下的子代码。在Ren'Py中,必须对每一行代码进行缩进以匹配之前的命令,并且在每行代码中所有的命令都必须以相同空格数进行缩进。
  
当一串文字中包含有双引号时,字符串中的双引号需要用反斜杠来进行转义操作。在上面例子中的最后一行,您可以看见这样的操作。
  
当然这么点东西是不够我们看的,不过这个例子告诉了我们,要在Ren'Py里做点什么其实是很容易的。 后面我们就会展示怎样往游戏里添加图片,不过在那之前,我们先来看看怎样声明一个角色。

初始化  
init(初始化)命令会在执行脚本之前先执行一些 Ren'Py 的命令块。Init块常被用来定义图像和角色,设置一些静态的游戏数据,或是自定义 Ren'Py 的一些功能。 Init块内的代码不应该与玩家有任何的交互或者改动任何游戏内图层,同样也不应该包括 say, menu, scene, show, 或者 hide命令 ——以及任何其他功能上类似的命令。
  
初始化命令以关键字 init 为标志,其后跟随一个数字用以表示优先级,最后必须以一个冒号作为结尾,如果没有提供优先级数字,系统将会以0作为默认值。 优先级数字的设置范围为-999到999,超出此之外的数字都是 Ren'Py 的保留字,请千万注意。
  
优先级数字决定了Init块中的命令的执行顺序。Init块中的命令按照优先级数字从小到大依次执行。 在一个文件中,有相同优先级的Init块会从上往下依次执行。不同文件之间相同优先级的Init块的执行顺序是无法确定的。
  
Init块只会在一个特殊的初始化阶段执行一次。如果一个 init 命令出现在正常的游戏执行阶段,那么它自身以及它之下的所有Init块都不会被执行。相对的,主程序会跳过这一段代码。

角色
  
在第一个例子中有个问题,那就是在每一次人物对话时,我们都要输入一次他们的名字。 因此如果是在一个对话很多的游戏里,这样的工作量将会变得很大。同时,我们也注意到所有人物的名字都是以同样的方式显示的:等宽的加粗白色文字。 为了解决这个问题,Ren'Py 允许您提前定义好人物的名字。这一功能允许您能用一个缩写来代表人物的全称,同时也能改变角色名称的颜色。
[RenPy] 纯文本查看 复制代码
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",在游戏中用绿色来显示她的名字。 (表示颜色的是RGB代码,常用于网页制作等)
  
第二行定义了一个角色,简称是 "m",全称是 "Me",游戏中用淡红色来显示。其余的角色定义都可以通过复制第一行的代码,并修改简称、全称和显示颜色来完成。
  
同时我们也对 say 命令做了修改,让其使用角色对象而不仅仅是角色名称,这也即告诉Ren'Py要使用我们在Init块中定义的角色。

图像

没有图像的视觉小说就不能称之为视觉小说。让我们来往我们的项目里加点图片。
[RenPy] 纯文本查看 复制代码
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?\""


首先我们需要声明一张图像。在Init块的第2, 3, 5, 6行,可以看到我们使用image 命令声明了四张图像。 这些 image 命令给每一幅图像都起了一个别名,同时也定义了该图像的文件名以使得系统能够检索到它。

举个例子,第五行声明了一个别名为 "sylvie smile" 的图像,而该图像实际文件名则是 "sylvie_smile.png",同时其还对应了一个名为"sylvie"的图像标签 。

在第 12 行我们使用了一个 scene 命令。这个命令会清空当前屏幕上的所有内容,然后加载 "bg meadow" 这张图像。下一行则是一个 show 命令,它的作用是将 "sylvie smile"这个图像加载到屏幕上。

每个图像名称的第一部分都是这幅图像所对应的标签。在一张图像将要被加载到屏幕上时,这时候如果另一张拥有相同图像标签的图像已经显示在了屏幕上,那么前者就会替换掉已经显示在屏幕上的图像。在例子里有类似的情况:在第 19 行的第二个 show 命令中,当主程序还没有执行到第 19 行时,图像已经被加载在了屏幕上。当执行到第 19 行时,"sylvie smile"图像就会被"sylvie surprised"所替代,原因是它们二者共用了一个相同的标签: "sylvie" 。

为了让 Ren'Py 能寻找到图像文件,您需要将它们放在当前项目的 game 文件夹下。您可以在 "Project-Name/game/" 目录中找到 game 文件夹,或者在启动器中点击 "游戏目录" 来进行跳转。您可能需要将 "the_question/game/" 文件夹下的图像文件拷贝到 "my_question/game/"文件夹下,才能运行这个例子。

Ren'Py并不对背景文件和角色立绘做出任何区分, 在Ren'Py看来,它们一样都是图像文件。通常来说,角色立绘需要透明通道,这意味着大多数立绘图像都是 PNG 文件。背景文件可以是 JPEG 或者 PNG 文件,通常都以 "bg" 作为标签。

Hide 命令.

Ren'Py 也支持hide命令,用于隐藏一个指定的图像。
[RenPy] 纯文本查看 复制代码
label leaving:

    s "I'll get right on it!"

    hide sylvie

    "..."

    m "That wasn't what I meant!"

事实上需要用到隐藏命令的情况极其罕见。需要改变角色的表情时,可以使用show命令;当所有人离开时,可以使用scene命令。只有当某一名角色离开画面的时候,您才需要用到hide命令。

转场效果  
只是单纯的把一张图片显示出来会比较缺乏趣味性,因此 Ren'Py 还提供了许多有趣的场景转换接口,让转场效果变得更加有趣。转场效果会让画面从上一个交互结束后的状态(dialogue, menu, transition),变化到在这之后执行任何了scene、show或者hide命令后的状态。
[RenPy] 纯文本查看 复制代码
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 转场效果。它的作用是从当前画面切换到下一个画面的时候使用渐变效果(相对于PPT来说,就是淡入淡出效果)。另一个比较常见的转场效果是fade,这个效果会让画面渐变成黑色,再从黑色渐变至下一个画面。

当with效果命令被放置在由scene, show和hide所组成的复合命令之后时,便会让这些内容一起显示出来。如果您这么写:
[RenPy] 纯文本查看 复制代码
    scene bg meadow
    show sylvie smile
    with dissolve

那么 "bg meadow" 和 "sylvie smiles" 两个图片会同时以 dissolve 的效果出现在屏幕上。如果想要让它们分别在不同的时间里以 dissolve 的效果显示出来,那您就需要使用两个with命令来完成:
[RenPy] 纯文本查看 复制代码
scene bg meadow
with dissolve
show sylvie smile
with dissolve

第一个 with 命令让 meadow 这张图片以 dissolves 的效果出现在屏幕上。之后sylvie以同样的效果显示在屏幕上。如果您希望立刻显示(不带任何效果)meadow 这张图片,然后再用 dissolves 的效果加载 sylvie,那您可以这么写:
[RenPy] 纯文本查看 复制代码
    scene bg meadow
    with None
    show sylvie smile
    with dissolve

在这里,None是一种特殊的转场效果:不管先前画面上是什么内容,它都会将所需加载的图像立刻显示在屏幕上,实际上也就是没有任何转场效果。

位置  
默认情况下,图像都是在中心位置水平显示的,并且图像下部的边缘部分会与屏幕底部的边缘重合。 通常这样的显示方式对于背景图像和角色立绘来说是没问题的,但是当我们想在屏幕上显示同时两个以上的角色的时候,将另外的角色安排在与其不同的其他位置明显会更好一些。 同时为了考虑故事的情节,将一个角色重新放置在不同的位置上也是合情合理的。
[RenPy] 纯文本查看 复制代码
show sylvie smile at right

为了实现角色重定位,我们需要给 show 命令添加一条 at 从句。 at 从句接收一个位置信息作为参数,并将图像在参数所示的位置显示出来。Ren'Py 内置了几个已经预定义好了的位置:left 指的是屏幕的左侧,right则是指屏幕的右侧, center 指的是水平中心位置(默认情况下), 而truecenter则是指水平中心垂直位置。
用户也可以自己来定义它们的位置,或者定义一些包含复杂运动的事件。但是这些内容已经超出了这篇新手教程的范畴了,所以在这里也就不再赘述。

音乐与音效
  
绝大多数的游戏都可以在背景中播放音乐。音乐通过 play music 命令来播放。音乐播放命令可以接收一个带有文件名的字符串,或者一个含有多个文件名的列表作为参数。如果传入的参数是列表的话,那么列表中的元素将会被按顺序播放。
[RenPy] 纯文本查看 复制代码
    play music "illurock.ogg"
    play music ["1.ogg", "2.ogg"]

当切换所播放的音乐时,您可以提供一个 fadeout 和 fadein 从句给音乐播放命令,前者用于淡出旧BGM,而后者则用于淡入新的BGM。
[RenPy] 纯文本查看 复制代码
play music "illurock.ogg" fadeout 1.0 fadein 1.0

如果您为音乐播放命令添加了一个循环从句,那么音乐将会循环播放。如果添加的是非循环的从句,音乐将不会循环播放。在 Ren'Py 中,音乐将会自动循环播放直至用户手动停止它。
[RenPy] 纯文本查看 复制代码
    play music "illurock.ogg" loop
    play music "illurock.ogg" noloop

背景音乐可以用 stop music 命令来停止,也可以选择使用 fadeout 从句来实现。
[RenPy] 纯文本查看 复制代码
stop music

可以通过 play sound 命令来设置音效,默认情况下音乐不会循环播放。
[RenPy] 纯文本查看 复制代码
play sound "effect.ogg"

Play sound 命令与 play music 命令下可以包含相同的从句。

虽然Ren'Py 支持多种音频格式,但是我们推荐您使用OGG 格式的音频文件。与图像文件相同,音频文件也必须被放置在 game 文件夹下。

Pause命令
  
Pause命令会使 Ren'Py 系统暂停,直到玩家点击鼠标为止。如果您给出了自定义的表达式,系统会自动地将表达式换算成数字。而pause 命令将会自动开始计时,直至时间达到表达式所代表的时间为止。

游戏结束
  
在没有使用过call命令的情况下,您可以通过执行 return 命令来结束游戏。 在这样做之前,您最好在游戏里显示一些信息以提醒玩家游戏即将结束,比如告诉玩家这个存档的名称或者这个存档的编号。
[RenPy] 纯文本查看 复制代码
    ".:. Good Ending."

    return

以上就是制作一个无选项的动态小说所需要学习的一些东西。接下来让我们来看看怎样制作一个有选项的游戏。

选项,标签和跳转  
Menu 命令允许您为用户设置一个选项。
[RenPy] 纯文本查看 复制代码
    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 ---"

这个例子展示了在 Ren'Py 中是如何使用选项操作的。menu 命令的作用是显示游戏内的菜单选项。menu 命令是一行行的代码,每行都是一个以冒号为结尾的字符串。它们是将要向玩家显示的选项。 每一个选项后都应该包含一条或多条 Ren'Py 代码语句,当对应的选项被选择时,其后的代码语句就会被执行。

在示例中,每个选项被选择后都会执行一个jump命令。jump命令会跳转到一个使用label命令定义的标签处,然后脚本将从那个标签开始运行。

在上面的例子中,在 Sylvie 发出了提问后,系统会向玩家展示一个有两个选择项的选项。如果玩家选择了 "It's a story with pictures.",那么第一个 jump 命令将会被执行, 主程序将会跳转到 vn l这个标签处。 这将会让角色说出 "It's a story with pictures and music.",接下来,主程序跳转到了 marry标签。

标签可以在 game 文件夹下的任意一个.rpy文件中定义。脚本文件的文件名对于 Ren'Py 来说并没什么影响, 所有标签会被视为在同一文件中。注意,在同一个文件中一个标签名称只允许出现一次。

Python 和 if 命令  
虽然只使用menu和jump命令就可以完成一个简单的(也可以是相当复杂的)游戏,但是在执行jump命令之后,我们应该将玩家的选择存储在变量中,并在需要的时候再次调用。 这就需要在 Ren'Py 中使用python 语句了。

可以用两种方式来调用 Python :在 Ren'Py 中,一行以$符号为始的代码会被视为一个 python 语句;或是使用 "python:" 关键字来标记由 python 语句组成的代码。

使用了Python以后,储存游戏中的flags就是小菜一碟。在游戏开始时初始化这个flag:
[RenPy] 纯文本查看 复制代码
label start:
    $ bl_game = False

您可以在之后的菜单选项中修改代码中的flag:
[RenPy] 纯文本查看 复制代码
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

然后在后面检测一下它的值:  
[RenPy] 纯文本查看 复制代码
"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 的变量不一定是简单的True/False值。它们可以是任意的 python 所支持的数据。 它们可以用来存储玩家的名字,或是存储分数,或是用于其他任何的用途。 自从 Ren'Py 可以完美地支持所有版本的 Python 之后,许多大胆的设想都可以实现了。

发布游戏  
您的游戏完成之后,在发布它之前,还有几件您需要完成的事:
  
检查是否有新版本的 Ren'Py

为了修正bug和添加新功能,Ren'Py会定期发行新版本。在发布游戏之前,点击启动器中的 update 按钮将 Ren'Py 升级到最新的版本。同时您也可以在这里下载到最新版本的Ren'Py,并查看改动列表:http://www.renpy.org/latest.html.
检查脚本
从启动器首页选择 "检查脚本并分析统计"功能,它将检测游戏中可能会影响到 Mac 和 Linux 平台玩家的问题,即使在您的电脑上这些问题并不存在,但是修复这些问题是一件非常重要的事。
打包

在启动器的首页,选择 "Build Distributions"选项。基于 options.rpy 中所包含的信息,启动器将会建立一个或者多个包含有游戏文件的归档文件。
测试
Lint 并不能作为测试的替代品。在发布您的游戏前,您有责任测试它是否能正常运行。您可以考虑拜托您的朋友们来帮助您进行beta版本游戏的测试。通常测试人员能找到一些您自己发现不了的问题。
发布
  
您应该将生成的文件(适用于 Windows, Mac, 以及 Linux)发布到网络上的某处,然后告诉人们他们应该去哪里下载您的游戏。 恭喜,您已经成功地发布了一个游戏!
  
同时也请将您发布的游戏添加到我们的 游戏数据库    中, 这样我们也能记录下又一个 Ren'Py 游戏的诞生。

The Question的脚本  
您可以在 这里阅读到'The Question'的完整脚本。

然后学什么?  
这个快速入门教程仅仅只介绍了 Ren'Py 的冰山一角。为了力求简洁,我们在这篇教程里省略了很多 Ren'Py 所支持的功能。为了进一步的学习和感受 Ren'Py 真正的模样,我们建议您继续阅读接下来的教程,让 Eileen 来向您展示这些功能。

您也可以阅读这个手册剩下的(复杂的)部分—— Ren'Py 的定义部分。

在 Ren'Py 的网站上, 有一个 FAQ 页面对一些常见的问题给出了回答,而另一个 Cookbook页面则能向您提供一些有用的代码片段。如果您有任何疑惑,可以到Ren'Py中文社区 里提问,或到Lemma Soft Forums,Ren'Py 的官方(英文)论坛来询问。 这是 Ren'Py 的中心社区,我们会热情地对待新手用户和他们的问题。

感谢您选择了 Ren'Py 视觉小说引擎。我们期待着您的佳作!


—————————————————————————— 尾线 ——————————————————————————

--------------------------
有任何意见与反馈
欢迎在 此处 交流







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

本版积分规则

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

GMT+8, 2018-10-24 10:34 , Processed in 0.041376 second(s), 24 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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