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上。
- 社区活跃,有什么问题到论坛上问问,都会得到回复。
# 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 start前面预先给角色定义一个别名,比如例子中就给”Eileen”定义了一个’e’,那么之后就可以以这种格式
角色别名 "台词"
来写了。
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 图像标示 = "图像路径+文件名"
从字面意思可以理解最开始的一组定义了四个背景(因为有bg)。图像有‘组’的概念,一般来讲一组图像是功能相同的,同一时刻只会显示其中之一。像第一组为bg,里面包含四个场景,第二组为sylvie的四个表情,第三组是sylvie2的四个表情(应该是换衣服了)。每一个组里面还包含子组。后面我们会看到如何使用这些组和图像。
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 背景图片 with 效果名称
Ren’Py非常方便的一点就是预先定义了几个常用的效果
http://www.renpy.org/doc/html/transitions.html#pre-defined-transitions
比较常用的有
show 之前定义的立绘图像名称 at 位置 with 显示/变换效果
hide命令
hide 角色名 with 效果
之前提到的图像分组的概念在这里就要用到了,一般来讲立绘的标示都会定义成 “名字 表情” 这样的层级,也就是一个角色有很多表情。在一个场景里同一个角色只能有一个。
show sylvie smile with dissolve
如果再写
show sylvie normal with dissolve
的话屏幕上并不会出现第二个sylvie,而是之前显示的那个逐渐改变了表情。
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时候也可以用这种表示方式。
- music:持续循环播放的背景音乐
- sound:一次性的音效
- voice:语音台词
play music/sound "文件路径" fadein 进入时间 fadeout 淡出时间
然后用stop命令来停止
stop music
menu:
"选项一":
分支一剧情
"选项二":
分支二剧情
这里的”选项一“
”选项二“指的是选项按钮里显示的文字,后面的剧情是选了选项之后触发的剧情。