python 或 renpy 中的 $

The $ in python or renpy

我正在玩一个名为“Doki Doki Literature Club”的游戏的游戏文件,该游戏是在 renpy 中制作的,一个用 [=19= 编写的视觉小说引擎] 。有些台词让我很好奇:

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

“$”有什么用?

这是一个 RenPy-specific 结构,不是 python 编程语言的直接组成部分。 RenPy mentions it in its guide to python statements:

A common case is to have a single line of Python that runs in the default store. For example, a Python one-liner can be used to initialize or update a flag. To make writing Python one-liners more convenient, there is the one-line Python statement.

The one-line Python statement begins with the dollar-sign $ character, and contains everything else on that line. Here are some example of Python one-liners:

$ 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 always run in the default store.

注意你的RenPyprograms/visual小说不是Python写的;它们是用 RenPy 自己的脚本语言编写的,这在很多方面类似于 python,但也有明显的不同。如果你想调用纯 python,你必须以 RenPy 的脚本语言允许的方式进行。

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

首先,它是 纯 python(python 目前为 2)。它存储在 .py 文件中,不支持回滚(默认情况下),并让您有机会创建基本功能和 类、高级 engine-dependant 代码,如自定义可视化组件。并不是所有的 RenPy 项目都使用纯 python,因为它需要一些编程技巧来编写和集成它。

第二部分是 renpy-specific 种语言。它通常被引用,如语言,但这是不正确的:renpy 中游戏逻辑的不同领域应该用不同的语言编写,它们之间的共同点是它们都存储在 .rpy 文件中,其中一些可以 运行 或使用另一个。没有renpy-specific代码就没有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 行,可能在某些脚本中。