原文: How to Make a Visual Novel Game in 10 Minutes – Python Ren'Py Tutorial

你有没有一些故事创意,想把它们变成小说?给小说添加一些视觉效果和互动性怎么样?

视觉小说可能是你正在寻找的游戏类型。本教程可帮助你在 10 分钟内完成设置,并且只需要最少的编码经验。让我们开始吧!

工具介绍和设置

我们将使用基于 Python 2.7 构建的 Ren'Py 视觉小说引擎。由于 Python 本身是一种脚本语言,你将能够在 Ren'Py 中“编写”你的视觉小说项目。

自 Python 3 发布以来,Python 2.7 已被淘汰,开发者不再积极维护这个版本。请放心 - Python 2.7 具有我们创建出色的视觉小说所需的所有功能。 此外,Ren'Py 的最新版本 Ren'Py SDK 7.4 提供了对 Python 3 的兼容模式。开发者也表示希望在下一个版本 Ren'Py 8.0 中与 Python 3 完全集成。

如何下载和设置 Ren'Py

你可以在其官方网站上下载适用于你的操作系统(Windows、Mac、Linux)的最新版本的 Ren'Py。

下载并安装 Ren'Py 后,你可以打开 Ren'Py 启动器,选择左侧的入门项目之一(教程、问题),然后单击启动项目

查看教程以了解该引擎的全部功能,或查看问题以查看你可以在 10 分钟内制作的非常基本的视觉小说。

Screen-Shot-2021-06-21-at-10.51.50
Ren'Py 启动器

如何在 Ren'Py 中创建一个新项目

让我们创建一个新项目。我的项目叫作森林徒步🌲,其中有一个简单的场景,两个孩子探索森林小径。

注意你选择的分辨率:默认是 1280 x 720,我们添加图片的时候,背景图片也要符合这些尺寸。

foresthike

如何运行样板项目

启动样板项目。在主菜单按开始键。两行简短的对话后,脚本结束,我们被带回到主菜单。

launch
运行样板项目

如何编写我们的项目

让我们开始基于样板编写我们的游戏脚本。

Sublime TextAtom 这样的文本编辑器都有语法高亮显示以 .rpy 结尾的 Ren'Py 脚本。查看这个 Sublime Text 包和这个 Atom 包

我们看到的两行对话位于 script.rpy 中。打开该文件,其内容应如下所示。就像在 Python 中一样,以 # 开头的行是注释,不会被视为 Ren'Py 脚本的一部分。请看下面的注释和代码。

# Declare characters used by this game
define e = Character("Eileen")


# The game starts here
label start:

    # Show a background
    scene bg room

    # This shows a character sprite
    show eileen happy

    # These display lines of dialogue.
    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!"

    # This ends the game.
    return
样板代码

label 用于控制流,我们将在下一节中介绍。

最后一行的 return 语句使我们回到主菜单。

如何声明字符和添加对话

让我们用我们的故事中的那些内容来替换样板字符声明和对话。我的故事是这样的:

define laura = Character('Laura')
define tom = Character('Tom')

label start:

    laura "Wait up, Tom!"
    laura "Tom!"
    laura "I said wait up!"
    laura "...Tom?"
    tom "Boo!"
    laura "Yikes... not again."
    tom "Are you scared?"
    laura "Not at all."
    laura "Running off like that is dangerous, you know."
    laura "We are in the forest. We could get lost."
    tom "Okay okay mom. I won't do it again."

    return
story

如何添加图片和过渡

如果你自己不是艺术家,你可以考虑在知识共享网站 itch.io 寻找素材。这是一个独立游戏市场,是寻找素材的好地方。

我为我的项目找到了这组角色精灵。对于背景图片,我只是简单地将艺术滤镜应用于知识共享图片,使现实生活中的图片具有漂亮的水彩美感。

我把我所有的图片放在 game/images 中。请注意,可以在图片文件名中使用空格。

Screen-Shot-2021-06-21-at-13.23.45
组织图片素材的传统方式

然后我们将这些图片以及一些过渡添加到 script.rpy。Ren'Py 在看到像 withat 这样的关键字时应用转换。你可以在 Ren'Py 的 ATL(动画和过渡语言)文档中阅读有关过渡的更多信息。

label start:
    scene bg forest day with fade
    show laura angry
    laura "Wait up, Tom!"
    laura "Tom!"
    laura "I said wait up!"
    laura "...Tom?"
    hide laura
    scene bg forest day with vpunch
    show tom happy at right with moveinbottom
    tom "Boo!"
    show laura angry at left with moveinleft
    laura "Yikes... not again."
    tom "Are you scared?"
    laura "Not at all."
    show laura sad
    laura "Running off like that is dangerous, you know."
    laura "We are in the forest. We could get lost."
    tom "Okay okay mom. I won't do it again."

    return
images

随着视觉效果的加入,我们的故事很好地融合在一起。

如何添加选项

具有不同分支和结局的游戏会增加乐趣。向 Ren'Py 脚本添加选择菜单很简单:

menu:
    "Which way should we go?"

    "Left":
        tom "Let's check out the trail on the left!"
    "Right":
        tom "Right is always the right way to go!"
choice

如何使用 Python 变量和控制流

我们可以在 Ren'Py 脚本中定义 Python 变量,并根据它们的值改变我们的故事流程。 Python 语句以 $ 或缩进的 python: 块开头。

将变量添加到我们之前的选择菜单中:

menu:
    "Which way should we go?"

    "Left":
        tom "Let's check out the trail on the left!"
        $ is_lost = True
    "Right":
        tom "Right is always the right way to go!"
        $ is_lost = False
scene bg forest noon with Dissolve(3.0)
scene bg forest dusk with Dissolve(3.0)
show laura sad at left with moveinleft
laura "It's getting late. Are you sure we aren't lost?"
if is_lost:
    show tom sad at right with moveinleft
    tom "I hope not, but I have a bad feeling about this."
else:
    show tom happy at right with moveinleft
    tom "We are fine. Look! There's the end of the trail."
    tom "I'm the best scout around."
ezgif.com-gif-maker-2-

有关在 Ren'Py 中使用 Python 的手工资源,请参阅本文末尾。

如何播放音乐

根据 Ren'Py 的音频文档,播放音乐和音效很简单,如下所示:

play music "mozart.ogg"
play sound "woof.mp3"

如何保存和加载游戏

Ren'Py 为我们完成了所有复杂的工作,并具有内置的保存和加载系统。

save
保存游戏
load
加载游戏

可以做的其他自定义设置

目前,在我们的对话中,整行文本会一次显示,而不是逐个字显示。我们可以像这样更改 options.rpy 中的变量 preference.text_cps(CPS 代表每秒显示的字数)。

default preferences.text_cps = 20
cps
设置自定义 CPS,以给定的速率一次一个字地显示文本

我们可以在 gui.rpy(GUI 代表图形用户界面,包括我们已经看到的文本框和菜单选项)或 screens.rpy 中自定义更多内容。

Ren'Py 还能做什么

Ren'Py 的功能不仅限于显示文本和图片。我甚至可以说 Ren'Py 与 Python 本身一样强大和通用。

使用 Pygame 模块,可以在 Ren'Py 中创建复杂的迷你游戏。我自己已经创建并开源了一些小游戏,包括一个与 Stockfish 国际象棋 AI 集成的国际象棋引擎以及一个自动为任何音乐文件生成节拍图的节奏游戏引擎

promotion
我创建的国际象棋游戏
demo-4
我创建的节奏游戏

资源

本教程应该可以帮助你开始使用 Ren'Py。当你学习更高级的功能以向你的项目添加效果时,参考官方文档总是很有用的。

我还创建了一些课程材料,以帮助你复习 Python 基础知识及其在 Ren'Py 脚本中的功能。

查看视频教程:

谢谢阅读本文!祝你享受创建故事的乐趣!

原文:How to Make a Visual Novel Game in 10 Minutes – Python Ren'Py Tutorial,作者:Lynn Zheng