0

我正在玩一个名为“ Doki Doki 文学俱乐部”的游戏的游戏文件,该游戏renpy是用 Python 编写的视觉小说引擎制作的。有些台词让我很好奇:

$ persistent.playthrough = 1
$ persistent.anticheat = renpy.random.randint(100000, 999999)
$ renpy.save_persistent()
$ delete_character("sayori")
$ in_sayori_kill = True 

“$”是干什么用的?

4

2 回答 2

2

这是一个 RenPy 特定的结构,不是 python 编程语言的直接部分。RenPy 在其 python 语句指南中提到了它

一个常见的情况是在默认存储中运行一行 Python。例如,Python one-liner 可用于初始化或更新标志。为了使编写 Python 单行语句更方便,有单行 Python 语句。

单行 Python 语句以美元符号$字符开头,并包含该行中的所有其他内容。以下是 Python 单行代码的一些示例:

$ flag = True

# Initialize a variable.
$ romance_points = 0

# Increment a variable. 
$ romance_points += 1

# Call a function that exposes Ren'Py functionality. 
$ renpy.movie_cutscene("opening.ogv") 

Python one-liners 总是在默认存储中运行。

请注意,您的 RenPy 程序/视觉小说不是用 Python 编写的;它们是用 RenPy 自己的脚本语言编写的,该语言在许多方面与 python 相似,但也有显着不同。如果要调用纯 python,则必须以 RenPy 脚本语言允许的方式进行。

于 2020-09-12T15:43:07.267 回答
2

RenPy 引擎本身是用 python 编写的,但它可以解释多种语言。

首先,它是纯python(现在是python 2)。它存储在 .py 文件中,不支持回滚(默认情况下),并让您有机会创建基本函数和类,以及高级引擎相关代码(如自定义可视组件)。并非所有 RenPy 项目都使用纯 python,因为它需要一些编程技能来编写和集成它。

第二部分是特定于 renpy 的语言。它通常被引用,就像在语言上一样,但这是不正确的:renpy 中不同的游戏逻辑领域应该用不同的语言编写,它们之间的共同点是它们都存储在 .rpy 文件中,其中一些可以运行或使用另一个。没有 renpy 特定代码就不可能有 renpy 游戏。

有:

  • 脚本语言
  • 屏幕 (UI) 布局语言
  • 动画和转换语言 (ATL)

但是,脚本语言和屏幕语言支持插入纯 python 部分。插入python代码有两种主要方法:

  1. 通过编写 python 块:
label my_label:
    python:
        print('hello there')
        print('general kenobi')
  1. 通过编写 python oneliner:
label my_label:
    $ print('stonks')

唯一的区别是oneliner只支持一个python命令(一行,呵呵),而python块支持任意数量的python代码。

所以,上面的代码只是很多 python oneliners,可能在一些脚本中。

于 2020-10-01T17:21:19.460 回答