变量¶
变量定义¶
define语句¶
define语句用于:
- 在初始化阶段给一个全局变量赋值
- 设定游戏配置项变量
用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语句一般有三个作用:
- 定义临时变量
- 修改已经定义过的全局变量(如使用
default
语句定义的变量) - 调用函数或方法
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语句支持设定运行优先级,可以在 init
和 python
之间可以放一个运行优先级数值。如果没有指定优先级,默认使用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