Ren’Py上手指南1


Ren’Py(http://www.renpy.org)是一个基于Python编写的文字AVG游戏引擎。可以快速开发出文字AVG游戏,因为Python的可移植性,可以将游戏发布到Windows,Linux和Mac上,并且可以通过官方提供的工具移植到Android上面(至于iOS,作者在论坛中表示不鸟这些封闭平台,不过有人在做ios的移植https://github.com/chrismear/renios/releases)。

在我看来选用Ren’Py的理由主要有下面几个:

  • 语法简洁,继承了Python的优点,常用的AVG元素基本上都以命令的方式实现了,封装了底层的技术细节,比如你不用去理解为什么要双重缓冲。
  • 可移植性强,上面提到了。
  • 可扩展性强,虽然是文字AVG引擎,但中间层的python也预留了更多的API,完全可以抛开上层的命令直接调用API来实现更加复杂的游戏功能,官网上已经有RPG模版了,也有人做了SLG,并发布到了Steam上。
  • 社区活跃,有什么问题到论坛上问问,都会得到回复。
在官网下载到的是一个压缩包,解压之后就可以直接运行,会看到一个控制台界面,其中界面左侧会列出本地路径找到的项目,默认会带两个示例项目,‘The Question‘是一个简单的AVG游戏,包含了基本的项目,tutorial是分别演示各种功能,建议先跑一下这两个看看。
创建新工程
点击”Create New Project”可以创建新游戏工程,随后会让你指定游戏项目的目录,名字以及界面风格。
打开刚才你指定的目录,会找到一个以游戏名字命名的文件夹,这就是根目录,打开以后里面会有一个game文件夹,所有的素材,脚本等全部放在这个文件夹下面,当然随着文件的增多,建议建立子文件夹来分类管理不同素材,比如images, sounds等等。
刚才打开的game文件夹里会有script.rpy这个文件,这是游戏脚本的入口文件,每次游戏都会从这里开始运行,我们先进去看看里面有什么。
# You can place the script of your game in this file.

# Declare images below this line, using the image statement.
# eg. image eileen happy = "eileen_happy.png"

# Declare characters used by this game.
define e = Character('Eileen', color="#c8ffc8")


# The game starts here.
label start:

    e "You've created a new Ren'Py game."

    e "Once you add a story, pictures, and music, you can release it to the world!"

    return

上面是默认生成的代码,“label start”是游戏的起点,每个script.rpy里面必须有这个label,当然你在后面还可以定义其他的label,一般来讲主要用在章节起始点,分支选项等地方,定义的语法为

label label名称:

尽可能地给每个label取一个有意义的名字,否则到后来多分支的时候你就搞不清楚该跳转到哪个label了,你可以通过jump命令从当前的位置跳转到指定的label,然后就会从那个label开始继续执行。

显示文字
在label里面可以包含若干个其他的命令,比如让角色说话就是
"角色名字" "台词"

或者你也可以像上面的代码这样,在label start前面预先给角色定义一个别名,比如例子中就给”Eileen”定义了一个’e’,那么之后就可以以这种格式

角色别名 "台词"

来写了。

如果要显示客观描述或者是心理活动这种没有人名的文字,就直接把文字用双引号引起来就可以了。
准备图片
和角色名字一样,图片在使用前也需要预先定义,可以打开附带的Question这个示例游戏的script.rpy文件(建议先跑几遍游戏,了解一下其中的元素,这样再看代码就比较清晰了)。
script.rpy文件开头应该是这样的
image bg lecturehall = "lecturehall.jpg"
image bg uni = "uni.jpg"
image bg meadow = "meadow.jpg"
image bg club = "club.jpg"

image sylvie normal = "sylvie_normal.png"
image sylvie giggle = "sylvie_giggle.png"
image sylvie smile = "sylvie_smile.png"
image sylvie surprised = "sylvie_surprised.png"

image sylvie2 normal = "sylvie2_normal.png"
image sylvie2 giggle = "sylvie2_giggle.png"
image sylvie2 smile = "sylvie2_smile.png"
image sylvie2 surprised = "sylvie2_surprised.png"

这就是定义图像的语句。基本的语法为

image 图像标示 = "图像路径+文件名"
其中图像路径指的是相对于game文件夹下的路径,也就是说如果你把图片直接放在game下面了就直接写文件名就可以;如果你在game下面新建了一个images文件夹把图像放在里面的话那就要在文件名前面加上’images/’。这个例子里面是直接放在game下面的所以直接写文件名。

从字面意思可以理解最开始的一组定义了四个背景(因为有bg)。图像有‘组’的概念,一般来讲一组图像是功能相同的,同一时刻只会显示其中之一。像第一组为bg,里面包含四个场景,第二组为sylvie的四个表情,第三组是sylvie2的四个表情(应该是换衣服了)。每一个组里面还包含子组。后面我们会看到如何使用这些组和图像。

但如果图像很多的话写起来也是不少的工作量,所以Ren’Py提供了另外一种方式,就是根据文件夹的路径来自动定义图像。
打开game下面的options.rpy文件,这里面是一些项目的配置选项,在里面找到config.automatic_images和config.automatic_images_strip这个选项,如果没有的话就在最后手动写一个,最后加完的结果应该是这个样子的:
    config.automatic_images = ['_','/']
    config.automatic_images_strip = ['image','character','background','CG','menu']

这样的话任何放在image, character, background, CG, menu下面的图像都可以自动解析,比如像刚才那个例子,直接把sylvie_normal.png放在game/image/character/下面就可以了,文件和路径名中的’_’和’/’会直接解析成空格,因为我们在config.automatic_images里面指定了这两个分隔符。

显示背景
像之前那样定义好了的话,就可以显示背景了,显示背景要使用scene命令
scene 之前定义的背景图片名称

这样就能看到背景图像显示在屏幕上了。

除了简单的显示以外,还可以添加进入的效果
scene 背景图片 with 效果名称

Ren’Py非常方便的一点就是预先定义了几个常用的效果
http://www.renpy.org/doc/html/transitions.html#pre-defined-transitions

比较常用的有

fade : 当前场景由明变暗,新场景由暗变明
dissolve:当前场景逐渐透明,新场景逐渐显现
显示立绘
显示立绘要用到show命令
show 之前定义的立绘图像名称 at 位置 with 显示/变换效果
隐藏角色立绘用
hide命令
hide 角色名 with 效果

之前提到的图像分组的概念在这里就要用到了,一般来讲立绘的标示都会定义成 “名字 表情” 这样的层级,也就是一个角色有很多表情。在一个场景里同一个角色只能有一个。

比如我先写了
show sylvie smile with dissolve

如果再写

show sylvie normal with dissolve

的话屏幕上并不会出现第二个sylvie,而是之前显示的那个逐渐改变了表情。

另外一个是位置这个参数,Ren’Py默认设置了三个位置left, center, right分别对应左中右,如果不加at参数的话就是默认在中间。当然你也可以自定义位置,当然这是后面要讲的了。
所以这个例子如果第二句写成
show sylvie normal at left with dissolve

你就会看到sylvie跑到左边去了,所以一般这时候我们可以写成

show sylvie normal at left with move

你就会看到sylvie是移动到左面去了,而不是闪现过去。

如果要有多个角色显示在屏幕上的话需要分别制定他们的位置,不然都会默认堆在中间。
show sylvie normal at left with dissolve
show sylvie1 normal with dissolve
show sylvie2 normal at right with dissolve

还有一种写法是

show sylvie normal at left
show sylvie1 normal
show sylvie2 normal at right 
with dissolve

这两种的区别是前一种三个角色逐个显示,第二种是一起显示,同样hide时候也可以用这种表示方式。

播放音乐
Ren’Py支持mp3, ogg和wav三种音频格式。
在Ren’Py中有三种音乐分别是:
  • music:持续循环播放的背景音乐
  • sound:一次性的音效
  • voice:语音台词
前两种都是用play命令来触发
play music/sound "文件路径" fadein 进入时间 fadeout 淡出时间

然后用stop命令来停止

stop music

分支选项
分支选项需要使用menu命令
menu:
    "选项一":
        分支一剧情
    "选项二":
        分支二剧情

这里的”选项一“
”选项二“指的是选项按钮里显示的文字,后面的剧情是选了选项之后触发的剧情。

还可以结合jump和label来实现跳转,比如两个分支剧情过后又有共同剧情,就在共同剧情开始时设置一个label,每个分支剧情结束后jump到那个label。