1984 字
10 分钟
Loading
编程语言基础

大家好,这里是小琴,今天我们来学习python的基础。

编程语言基础#

首先,我们需要了解一些renpy(简称rpy)脚本的结构,例如是如何分割为语句块,脚本,基本元素和语句等。

文件#

Ren’Py游戏脚本由 game/ 目录下众多扩展名为 .rpy 的文件组成。Ren’Py会依次检查每一个文件(按照他们路径的Unicode码顺序),并把文件内容用作脚本。

总之,把一份脚本打散成多个文件,与一份脚本保存在一个大文件中,两种方法是等效的。主控流程可以在文件之间通过调用 脚本标签 跳转。把一份脚本切分为多个文件跟创作者个人风格有关——有些游戏制作者喜欢使用小文件(像一个事件一个文件,或者每一天一个文件),而其他制作者倾向于使用一个完整的大脚本文件。

我倾向于认为要拆多一点,因为太长的文件,编辑器打开会发生卡顿。

为了提高加载速度,Ren’Py启动时会把 .rpy 文件编译为 .rpyc 文件。当一个 .rpy 文件发生变更时, .rpyc 只有重启Ren’Py进程才会更新。另外,如果一个 .rpyc 文件并没有对应的 .rpy 源文件,这个 .rpyc 文件依然会被使用。当 .rpy 文件已经删除而 .rpyc 文件没有删除的情况下,可能会导致运行时出现问题。

文件名必须以字母或者数字开头,并且开头不能用“00”,因为“00”开头的文件是Ren’Py内部使用的。

根目录#

根目录是包含构建该游戏所有文件的目录(尽管有些文件并不参与游戏构建)。像README(须知)类文件应该放在根目录中。

注释#

和python的注释差不多

# 这是一条注释。
show black # 这也是一条注释。
"# 这不是一条注释因为它是一个字符串的一部分。"

逻辑行#

一个脚本文件可以被切割为一些逻辑行(logical line)。一条logical line(逻辑行)往往在文件中顶格起始,换行结束,有一些例外:

  • 该行结尾是反斜杠 (\)。
  • 该行包含几个开括号字符(({[),而该行没有匹配到对应的闭括号字符 ()}])。
  • 任何 字符串中出现换行,包括单引号中的字符串。这条规则与Python的规范不同。

一个逻辑行结束后,下一行就是另一个逻辑行的开始。

"这是一条逻辑行。"
"因为这条逻辑行包含一个字符串,
所以换行也依然是同一条逻辑行。"
$ a = [ "由于括号的存在,这也是一条",
"可以突破换行的逻辑行。" ]

语句元素#

Ren’Py语句由一些基本部分组成。

  • 关键词(keyword)

    关键词是一个英文单词,必须在游戏脚本中合法出现。关键词通常用于出现在语句和属性中。关键词主要用于引入语句(statement)和特性(property)。

  • 名称(name)

    名称以一个字母或者下划线开头,之后跟随着0个或者若干个字母、数字或者下划线。出于我们的需求,在“U+00a0”和“U+fffd”之间的unicode字符都被认为是字母。

以一个下划线 (_) 开头的名称都是Ren’Py内部预留的,除非文档另有说明。

以两个下划线 (__) 开头但不以两个下划线结尾的名称,会被转为那个名称的特定文件类型版本。

  • 图像名(image name)

    图像名(image name) 由一个或多个部分构成,以空格分隔。 图像名的第一部分称作 图像标签(image tag) 。图像名后面的部分都是 图像属性(image attributes) 。图像的各部分都是由字符、数字和下划线组成的字符串。例如,一个图像名为 mary beach night happy 。图像标签(tag)就是 mary ,而图像属性(attribute)就是 beachnighthappy 。单词 atasbehindonlayerwithzorder 都不能用于图像名中。

  • 字符串(string)

    字符串以一个引用字符(”、’或者`)开头,包含一些字符,并以同样的引用字符结尾。反斜杠()用于字符转义,一些特殊字符,比如%(需要写作%)、[(需要写作[)、{(需要写作{)。它还用于包含下一行,此时使用\n串。在Ren’Py字符串中,连续多个空格会被压缩为一个空格字符,除非某个空格前面有一个反斜行。

  • 简单表达式(simple expression)

    简单表达式就是一个Python表达式,用于在Ren’Py脚本中运行Python。一个简单表达式使用以下类型作开头:一个变量名。一个字符串。一个数字。圆括号中包含的任意表达式。其后可以接续任意数量的:名称前的一个英文句号字符。圆括号内的Python表达式。举例,3(3 + 4)foo.barfoo(42) 都是简单表达式。但 3 + 4 则不是“简单”表达式,因为该表达式是一个算式字符串且没有使用圆括号。

  • python表达式

    python表达式是指任意的、可能不包含分号的python表达式。这些表达式常用于 ifwhile 语句中,处理对应的情况。

通用语句语法#

大多数Ren’Py语句使用通用的语法。而 say语句 语句是个例外,其使用开头的某个关键词标识say语句。如果语句中包含变量的话,会跟在该关键词后面。

变量后面会跟着一个或多个特性(property)。特性(property)可以使用任意顺序排列,每个属性均只会出现一次。一项特性(property)以一个关键词开头。对大多数的特性(property)来说,属性名字会跟之前出现的语法元素(element)之一保持一致。

若该语句包含一个语句块(block),那行语句会以冒号(:)结尾。否则的话,以换行结尾。

特殊:

  • 元组(tuple)

    元组(tuple)是一种容器,其元素(item)数量非常重要。例如,我们可以使用一个2维元组(也被称作pair)来装宽度和高度数据,或者使用一个4维元组(包含x、y、宽度和高度)来装一个三角形的数据。元组(tuple)开头有一个左括号 ( ,可以由0个或若干个逗号分隔的python表达式,并以一个右括号 ) 结束。比较特殊的是,只有一个元素(item)的元组中,元素后面必须带一个逗号。各种例子如下:() (1,) (1, "#555") (32, 24, 200, 100)

  • 变量(variable)

    python表达式中可以使用变量。通过 define 语句语句或者 default语句 语句定义变量,数值可以存放在变量中。 变量名的规则与 语句元素中的 name 相同。例如:playername love_love_points trebuchet2_range 以下划线“_”开头的变量是预留给Ren’Py专用,创作者不应使用。

  • 调用(call)

    python表达式可以调用一个函数并获得一个返回值。函数调用以一个表达式开头(通常是函数名),后面跟着一对圆括号,括号内有一系列参数。参数列表开头是个python表达式,也是固定位置参数。后面则是关键词参数,由参数名、等号和表达式组成。下面是一个例子:Character("Eileen", type=adv, color="#0f0") 我们调用了 Character() 函数。其给定了一个固定位置参数,也就是字符串”Eileen”。其给定了两个关键词参数: type 被赋值为 adv ,而 color 被复制为字符串 "#0f0"。除了函数之外,其他可以调用的对象都统称为 callables

编程语言基础
https://vilstia.pages.dev/posts/游戏开发/renpy/3/
作者
琴泠
发布于
2026-02-13
许可协议
CC BY-NC-SA 4.0