跳转至

变量

变量定义

define语句

define语句用于:

  1. 在初始化阶段给一个全局变量赋值
  2. 设定游戏配置项变量

用define语句定义的变量会被当作一个常量,在存档时不会被保存,不应被修改

define语句可以放在脚本文件的任何位置,但一般建议放在脚本文件的开头(顶级位置)。

# 定义一个名为Sylvie的角色
define s = Character("Sylvie")

label start:
    s "Hello, world!"
    return

default语句

default语句用于给一个在游戏初始化时未定义的全局变量赋值。

所有用default定义的变量在存档时都会被自动保存

default语句可以放在脚本文件的任何位置,但一般建议放在脚本文件的开头(顶级位置),界面变量除外。

# 定义一个名为Sylvie的角色
define s = Character("Sylvie")
# 定义初始好感度为0
default love = 0

label start:
    s "Hello, world!"
    $ love += 10    # 好感度加10
    return

单行Python语句

单行Python语句由一个 $ 作为标志,后面可跟一条Python语句。

单行Python语句一般有三个作用:

  1. 定义临时变量
  2. 修改已经定义过的全局变量(如使用 default 语句定义的变量)
  3. 调用函数或方法
default num = 0

label start:
    $ a = 1    # 定义临时变量a,离开start标签就会被回收
    "num的初始值为[num]"
    $ num += 1    # 修改全局变量num,使其增加1
    "num的值为[num]"
    "a的值为[a]"
    return

多行Python语句

多行Python语句与单行语句的作用一样,但是可包含一条或多条Python语句。

default num = 0

label start:
    "num的初始值为[num]"
    python:
        a = 1    # 定义临时变量a,离开start标签就会被回收
        num += 1    # 修改全局变量num,使其增加1
    "num的值为[num]"
    "a的值为[a]"
    return

init python语句

init python语句本质上是多行Python语句,但在初始化阶段运行。可以用于定义类和函数,或者初始化样式、配置变量、持久化数据。

与define语句类似,在init python语句中被赋值的变量不会用于存档、读档,且不接受回滚。因此,在初始化完成后,这些变量值(常量)就不该改动。

init python:
    # 定义一个名为Sylvie的角色
    s = Character("Sylvie")

    # 定义greet函数
    def greet(speaker, content="Ciallo~(∠・ω< )⌒★"):
        """让某位角色打招呼"""
        speaker(content)

default num = 0

label start:
    python:
        greet(s)    # 让Sylvie打招呼
        s("num的初始值为[num]")
        a = 1    # 定义临时变量a,离开start标签就会被回收
        num += 1    # 修改全局变量num,使其增加1
        s("num的值为[num]")
        s("a的值为[a]")
    return

在上面的代码中,

init python:
    s = Character("Sylvie")

的作用等价于

define s = Character("Sylvie")

但是不利于调试。所以定义常量建议使用define语句。

init python语句支持设定运行优先级,可以在 initpython 之间可以放一个运行优先级数值。如果没有指定优先级,默认使用0。

init python语句按照优先级数值从低到高的顺序运行。优先级相同的情况下,按照文件名的Unicode字符顺序。

为了避免与Ren'Py引擎产生冲突,最好选用 [-999, 999] 范围内的数作为优先级。原则上,负整数的优先级主要用在库和配置,普通的init python语句应该使用0或者正整数作为优先级。

init 1 python:
    a = 0

init 2 python:
    a = 1

label start:
    "a的值为[a]"
    return

存储区

在Ren'Py中,变量所处的命名空间称为存储区。在同一存储区中,变量名不能重复,否则将产生冲突。 默认的存储区为 store

定义

常规定义

在定义变量时使用 Namespace.var 的方式可以在 Namespace 存储区下定义变量 var,若存储区不存在则创建一个,若位于默认存储区即 store 则省略。

# 变量默认定义于store存储区下
define s = Character("Sylvie")
# 在sylvie存储区中定义love变量
default Sylvie.love = 0

label start:
    "[s.name]的好感度为[Sylvie.love]"
    return

在python语句中定义

使用 in 分句可在python语句中接入自定义的存储区

define s = Character("Sylvie")

# 接入sylvie存储区
init python in Sylvie:
    # 在sylvie存储区中定义love变量
    love = 0 

label start:
    "[s.name]的好感度为[Sylvie.love]"

    # 接入sylvie存储区
    python in Sylvie:
        love += 1

    "[s.name]的好感度为[Sylvie.love]"
    return

使用

常规使用

使用 namespace.var 的方式可以访问位于 namespace 存储区下的变量 var,默认存储区即 store 则可省略。

# 变量默认定义于store存储区下
define s = Character("Sylvie")
default num = 0

label start:
    # 下面两条语句等价
    s "Ciallo~(∠・ω< )⌒★"
    store.s "Ciallo~(∠・ω< )⌒★"

    # 下面两条语句等价
    s "[num]"
    s "[store.num]"

    return

在python语句中使用

要在python语句中使用自定义的存储区但又不想接入该存储区(如需要同时使用多个不同的存储区)可以使用 from import 语句导入该存储区。

define s = Character("Sylvie")
define a = Character("Alice")

init python in Sylvie:
    # 在Sylvie存储区中定义love变量
    love = 0 

init python in Alice:
    # 在Alice存储区中定义love变量
    love = 0 


label start:
    "[s.name]的好感度为[Sylvie.love]"
    "[a.name]的好感度为[Alice.love]"

    # 默认接入存储区store
    python:
        from store import Sylvie    # 导入sylvie存储区
        from store import Alice     # 导入alice存储区

        Sylvie.love += 1
        Alice.love += 1

    "[s.name]的好感度为[Sylvie.love]"
    "[a.name]的好感度为[Alice.love]"
    return

若只想单纯使用而不修改某个自定义存储区下的变量,也可以单独导入该变量。

# 导入alice存储区中的love变量
from store.Alice import love