对话¶
文本剧情是视觉小说类游戏的根本,一切游戏形式都要建立在对话之上。Ren'Py为我们提供了简便快捷的say语句来方便演示对话。
say语句¶
say
语句一般有以下几种形式:
- 一个单一字符串,表示显示的内容。一般用作旁白。
- 由两个字符串组成,前面的字符串表示发言人的名字,后面的表示显示的内容。
- 表示显示的内容的字符串用三引号引起,方便显示长段文本。
- 由一个角色对象和一个字符串组成,角色对象控制发言展现的形式,字符串则是显示的内容。这种形式也是最为常用的。
有些say语句会在原有基础上加上一个
with
从句,后跟上一个转场来实现一些演出效果。
label start:
"我很紧张"
"我" "我喜欢你!"
"希尔薇" "这是真的吗?!" with vpunch
return
vpunch
是一个内置转场,可以达到让窗口抖动的效果。同时,Ren'Py还内置了很多如 vpunch 的转场,可以在官方文档中查看。
角色对象¶
我们一般使用 Character
函数构建一个角色对象。
define s = Character("Sylvie")
Character函数支持很多参数,常用的如下:
-
name
- 角色的名字。如果该参数是一个字符串,则在对话中显示为角色名;如果为
None
,则不显示名字,可用于旁白。
- 角色的名字。如果该参数是一个字符串,则在对话中显示为角色名;如果为
-
kind
- 新建角色的基底角色类型。通常取值为
adv
或nvl
。adv
:文本显示在对话框中。nvl
:文本显示在屏幕中间。
- 新建角色的基底角色类型。通常取值为
-
image
- 与角色关联的图像标签名,类型为字符串。
-
who_color
- 角色名的颜色,通常为一个表示颜色的十六进制数的字符串。
-
what_color
- 对话文本的颜色,通常为一个表示颜色的十六进制数的字符串。
-
what_prefix
- 在显示对话内容之前添加的前缀字符串。
-
what_suffix
- 在显示对话内容之后添加的后缀字符串。
-
who_prefix
- 在显示角色名字之前添加的前缀字符串。
-
who_suffix
- 在显示角色名字之后添加的后缀字符串。
-
dynamic
- 如果为
True
,则角色名name
应是一个包含 Python 表达式的字符串。该表达式会在每行对话执行前进行计算,计算结果将作为角色名。
- 如果为
-
condition
- 如果给定,该参数应是一个包含 Python 表达式的字符串。如果表达式结果为
False
,则对话不会发生,即say
语句不会执行。
- 如果给定,该参数应是一个包含 Python 表达式的字符串。如果表达式结果为
-
ctc
- 用于“点击继续”提示的可展现部件。如果使用了其他特殊提示,则可能不会显示。
以
who
为前缀的参数表示人名的样式,以what
为前缀的参数表示文本的样式。除了以上的样式参数,还支持更多样式,可查看官方文档。使用
who_style
或what_style
的格式(style
为样式名)即可作为参数传入Character函数。
define s = Character(
"Sylvie",
who_color="#FFA500",
what_color="#FFE4E1",
what_prefix="『",
what_suffix="』",
)
label start:
s "你好!"
return
下面是一个nvl角色样例
define s = Character(
"Sylvie",
kind=nvl
)
label start:
s """
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。
诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
"""
nvl clear
return
由三引号引起来的文本,Ren'Py会根据内容中的空行自动分段。分段后的每一段内容,都会创建自身的say语句。
特殊文本样式¶
所有在Ren'Py中以字符串形式呈现的文本都可以使用特殊的样式,下面将介绍一些常用的特殊样式、使用方法以及注意事项。
转义符¶
如果你想在文本中呈现一些特殊字符需要转义来转义防止Ren'Py误解我们的意思。
在文本中,以下字符为转义以后的写法:
\
->\\
'
->\'
"
->\"
%
->\%
或%%
{
->{{
[
->[[
【
->【【
如果你的字符串是以一对双引号表示的,那么如果你想在文本中显示双引号就需要使用转义符,如果你的字符串是以单引号表示,那么则反之。
label start:
"\"你好。\""
'\'我是......\''
return
同时,还能使用 \n
来表示换行:
label start:
"1\n2\n3\n4"
return
内插字符¶
Ren'Py支持在文本中插入一个表达式并计算表达式的值,我们叫做内插字符。在Python中也有类似的字符串格式化用法。
我们使用一对方括号来修饰我们的表达式。
define s = Character("Sylvie")
default point = 1
label start:
s "我的名字是[s.name]"
"当前好感度为[point]"
return
同时,内插字符还支持一些特殊转换标记。我们使用 !
来表示后面的字符为特殊转换标记。下面是一些比较常用的转换标记:
!i
表示在字符串中进行二次插值
define s = Character("Sylvie")
default point = 1
label start:
$ introduction = "名字为[s.name],好感度为[point]"
s "[introduction!i]"
return
!u
会强制把英文文本转换成大写。!l
会强制把英文文本转换为小写。!c
会强制把英文文本首字母转换为大写。
我们可以配合一起使用:
define s = Character("Sylvie")
label start:
$ content = "hello WORLD!"
# 使用顺序不分先后
s "[content!lc]"
return
文本标签¶
如果你使用过HTML,那么你一定对“标签”很熟悉!在Ren'Py中,我们采用文本标签来实现对文本的特殊效果。
文本标签由一对大括号和一个标签名以及相应参数组成,不同的标签名及参数有不同的效果。
所有文本标签都需要闭合,其中有些文本标签是自闭和的,而有些文本标签需要对应的闭合标签来闭合。标签闭合间的文本将会呈现特殊效果。一般来说,文本标签的格式为:
"{tag=arg}text{/tag}"
其中 tag
为标签名,arg
为参数值,{/tag}
为闭合标签。
还有一些格式为:
"text{tag=arg}"
让我们来看看有哪些常用的文本标签。
a
¶
没错,正如其名,锚点标签的作用就是“传送”,能够引导玩家进入不同的地方。它拥有多个参数,下面来一一介绍:
- jump
当入参为 jump
时,会进入其冒号后指定的脚本标签。
label start:
"点{a=jump:dianwo}我{/a}进入"
return
label dianwo:
"已进入"
return
- call
当入参为 call
时,会调用其冒号后指定的脚本标签。
label start:
"点{a=call:dianwo}我{/a}进入"
"出来了"
return
label dianwo:
"已进入"
return
- show
当入参为 show
时,会显示其冒号后指定的界面,这里涉及到一个新的概念“界面”,我们不展开讨论。
- URL
当入参部分是一个URL(或者说网站链接)时,会自动启动浏览器打开链接。
label start:
"{a=https://www.bilibili.com/video/BV1uT4y1P7CX/}点我涩涩{/a}"
return
alpha¶
alpha文本标签指定一个透明度,渲染范围为自身及其闭合标签内的文本。透明度是一个介于0.0和1.0之间的数值,分别对应完全透明和完全不透明。
label start:
"{alpha=0.8}总觉得......{/alpha}"
"{alpha=0.5}要消失了呢......{/alpha}"
"{alpha=0.3}......{/alpha}"
return
b¶
粗体标签,将自身及其闭合标签内的文本渲染为粗体。
i¶
斜体标签将自身及其闭合标签之间的文本渲染为斜体。
s¶
删除线标签在其自身及其闭合标签之间的文本上画一条删除线。
u¶
下划线标签在其自身及其闭合标签之间的文本添加下划线。
color¶
颜色文本标签将自身及其闭合标签内的文本渲染为特定的颜色值。颜色值使用 #rgb
#rgba
#rrggbb
#rrggbbaa
格式之一。
cps¶
cps标签用于指定其闭合标签内的文本每秒钟显示的字符数,若带 *
,则表示当前速度的倍数。
label start:
"{cps=30}时间要开始加速了!{/cps}"
return
font¶
字体标签将标签自身及其闭合区间之间的文本渲染为指定的字体。入参即使用的字体文件名或路径。
image¶
图片标签会在文本中内插一个图像。(可以用于插入表情包)
size¶
字号标签改变了其自己及其闭合标签内的文本字号。若参数为整数则表示文本大小,若为一个 *
加一个浮点数的形式则表示为当前文本大小的倍数大小。
fast¶
fast标签只能用于对话中(即say语句),改标签为自闭和标签,在该标签前面的文本内容会立即显示。
label start:
"你说"
"什么?!{fast}"
return
nw¶
nw标签同样只能用于对话中(即say语句),是一个自闭合标签,该标签前的那行文本内容在显示一次后会立刻消失,显示下一句话。
label start:
"什么东西?{nw}"
"?可恶"
return
若指定参数,则表示等待对应的秒数后再执行文本消失。
label start:
"你好?{nw=2}"
"怎么不说话呢?"
return