角色
有角色的对话,需要 define
一个 Character
,然后调用角色对应的标签才可以运行。
多行对话时,可以使用三引号来区分,然后用回车键来隔开。
define a = Character('alice')
label start:
a "Hello world!"
"Hello world!"
a """
Hello
Hello world!
"""
what_
标签表示对话内容相关的前缀,who_
标签表示角色名字相关的前缀
what_size
属性可以调整一个角色说话时的文本大小,who_size
表示角色框文字大小。
what_prefix
显示对话内容之前,添加的前缀字符串;what_suffix
显示对话内容之前,添加的后缀字符串;who_prefix
显示角色名字之前,添加的前缀字符串;who_suffix
显示角色名字之前,添加的后缀字符串。
window_background
表示该角色对话内容背景。
who_bold
可以设置角色名字为粗体
outline
可以设置文本外边框,四个参数为:粗细、颜色、x偏移、y偏移。
define a = Character('alice', what_size = 24, who_size = 50,window_background="gui/textbox2.png", who_color="#C8FFC8",what_color="#CFC5C8",who_bold = True, what_outlines=[(1,"#000800",1,1)],what_suffix='喵')
ctc
一个用做“点击继续”提示的可展现部件,若有其他特殊提示被使用时可能不会展现。
ctc_pause
当文本显示被 {p}
或 {w}
标签 (tag)
暂停时,用作“点击继续”提示的一个可视组件。
ctc_timedpause
当文本显示被{p=}
或{w=}
标签(tag)
暂停时,用作“点击继续”提示的一个可视组件。当该值为None时,会使用 ctc_pause
的值作为默认值。若你想要使用 ctc_pause
而不是 ctc_timedpause
,请使用 Null()
。
ctc_position
该参数控制“点击继续”提示的位置。若值为 "nestled"
,该提示会作为目前展示文本的一部分出现,在最后一个字符显示后立即出现相应提示。若值为 "fixed"
,提示会被直接添加到界面上,其在界面上的位置由位置样式属性控制。
#定义一个两秒旋转一圈的雪花
image end_pic:
"snowflake.png"
size (16, 16)
block:
rotate 0
linear 2.0 rotate 360
repeat
#闪烁效果
transform Flashing:
alpha 0.0
linear 1.0 alpha 1.0
linear 1.0 alpha 0.0
repeat
image download:
"download.png"
size(25,25)
Flashing
define a = Character('alice',ctc="download",ctc_position="nestled")
narrator
默认为旁白
当一个角色与一个图像标签(tab)关联,包含对应角色的say语句将在角色名和第二个字符串之间就可以插入图像属性(attribute)。
在这中情况下,如果带有给定标签(tag)的某个图片需要显示,Ren’Py会定位一条包含角色标签(tag)和属性(attribute)的show命令。如果图片未显示,Ren’Py会保存属性(attribute)并用于头像,但依然不会显示图片。
image alice_image a = "alicea.png"
image alice_image b = "aliceb.png"
image alice_image c = "alicec.png"
label start:
show alice_image a with dissolve
alice "Hello world!"
alice c "Hello world!"
alice b "Hello world!"
图像及其变换
标准图像展示有两种,scene
和 show
- scene:清楚当前界面的所有图像,然后展示该图像
- show:展示图像
显示一个图像时,通常可以使用 at
来决定图像的位置(及变换),at
的标准函数有两个:left
和 right
图像的变换可以使用 with
属性进行。
隐藏图像通常用 hide
。
show alicea at left
alice "Hello world!"
hide alicea
#展示 alice 后隐藏 alice
新展示的图像会覆盖到旧图像的上一层。
show adventure
show alicea at left
#alice 在 adventure 上层
alice "Hello world!"
hide alicea
with dissolve
#alice 渐变消失
show alicea at right
图像的基本语法
- Anchor 锚点的水平坐标,以可视组件左边为坐标零点
- Pos 水平坐标,以整个区域的左边为坐标零点。
- Center xpos -> 0.5 xanchor -> 0.5
- Offset 可视组件在水平方向偏离的像素数。向右偏离时是正数。
- Align 将 xpos 和xanchor 设置为相同的值。
- Zoom 放大倍数。
- Alpha 透明度,1.0完全不透明,0.0完全透明。
- Rotate 角度
show alice_image a:
xpos 0.0
ypos 0.5
#人物立绘并非在左边的中间位置,因为还有透明像素
xcenter 0.5
ycenter 0.5
#人物立绘在中间位置
xoffset -100
#立绘整体移动 100 像素
zoom 2.0
#放大两倍
图像的变换:
– Linear 线性变换
– Ease 缓动函数(慢->快->慢)
– Easein (慢->快)
– Easeout (慢->快)
– Pause 暂停
– Time 时间后
– Parallrl / contains 同时运行区块
transform re_left:
xalign 0.0
yalign 1.0
linear 1.0 xalign 1.0 yalign 0.0
#图像从左下角移动到右上角
transform re_left——2:
xalign 0.0
yalign 1.0
block:
linear 1.0 xalign 1.0 yalign 0.0
linear 1.0 xalign 0.0 yalign 1.0
repest
transform re_left——3:
xalign 0.0
yalign 1.0
parallel:
ease 2.5 xalign 0.2 yalign 0.5
linear 2.5 xalign 0.8 yalign 0.5
repest
parallel:
rotate 0
linear 3.5 rotate 360
repest
音乐和音效
标准声音播放有三种:music
、sound
、vioce
。
- music:默认循环播放。
- sound:默认播放一次。
- voice:默认播放一次并且点击就会停止。
可以使用 stop
语句来立即停止音乐。
选项与分支
menu
语句能够给玩家提供一个分支选项
使用 jump
、label
来确定选项对应的不同结果。
可以随时使用 flag
标识来让选项的结果立 flag 作为伏笔,影响之后的游戏进程。
想让 flag
生效,需要使用 if
以及 else
语句,来对 flag
进行回收。
menu:
alice "这是选项"
"这是选项1":
jump second
"这是选项2":
jump third
label second:
alice "选项1"
return
label second:
alice "选项2"
return
python代码
$ 后可以接 python 语句
多行语句使用 python:
define flag = False
label start:
menu:
alice "这是选项"
"这是选项1":
$ flag = True
#等价于
#python:
# flag = True
"这是选项2":
pass
label second:
if flag == True:
# if flag:
alice "选项1"
else:
alice "选项2"
return
文本标签、转义、内插数据
label start:
"比如,这是{b}粗体{/b},{i}斜体{/i},{s}删除线{/s},{u}下划线{/u}"
"{a=jump:second}a标签可以用来超链接{/a}"
"{alpha=0.5}alpha标签表示透明度{/alpha}"
"{color=#66CCFF}color标签可以改变文字颜色{/color}"
"{cps=25}cps标签可以让一段文本速度暂时改变{/cps}"
"可以修改一部分文字的{font=DejaVuSans-Bold.ttf}字体{/font}"
"size标签可以让一段文字的字体{size=+10}变大{/size}或者{size=-10}变小{/size},以及{size=30}指定大小{/size}"
"tag标签强行插入{space=30}一段空白,{vspace=30}vspace 则是插入上下行的空白"
"p标签表示行标签{p}用于一个对话内换行(需点击两次),{p=1.5}可以设定最长点击时间"
"w标签同上{w}但是不换行"
"nw标签可以在两句话之间加入动画"
"比如这样{nw}"
hide alicea
show alicec with dissolve
extend "比如这样就动了"
"想打百分号的话,需要打两个%%"
"\n表示换行"
#使用[]来引用内插数值
#例如
flag = False
"flag=[flag]" #flag = False flag = True * True
"flag=[flag]" #flag = 1
label second:
"你点击了一个文本标签"
转场
基础转场
- fade: 0.5秒时间画面逐渐暗淡至全黑,然后0.5秒时间画面从全黑逐渐变亮成新界面。
-
dissolve: 0.5秒时间,使用溶解效果从旧界面切到新界面。
-
pixellate: 0.5秒像素化旧场景,并0.5秒反向像素化至新场景。
-
move:通过在图像上移动位置切换场景。
-
moveinright 及: moveinleft, moveintop, moveinbottom
从界面上对应的边界移入图像,用时0.5秒。
-
moveoutright 及: moveoutleft, moveouttop, moveoutbottom
从界面上对应的边界移出图像,用时0.5秒。
-
ease 及: easeinright, easeinleft, easeintop, easeinbottom, easeoutright, easeoutleft, easeouttop, easeoutbottom
类似于上面的move系列转场效果,差别在于ease系列基于余弦曲线放缓开始和结束的转场。
-
zoomin: 镜头放大切入图像,耗时0.5秒。
-
zoomout: 镜头缩小离开图像,耗时0.5秒。
-
zoominout: 先镜头放大切入图像,然后镜头缩小离开图像,耗时0.5秒。
-
vpunch: 这种转场效果,会垂直摇晃界面0.25秒。
-
hpunch: 这种转场效果,会水平摇晃界面0.25秒。
-
blinds: 垂直遮蔽原界面,耗时1秒。一个 ImageDissolve() 转场类的实例。
-
squares: 以平面效果转场界面,耗时1秒。
-
wipeleft 及: wiperight, wipeup, wipedown
以指定方向擦除原界面。
-
slideleft 及: slideright, slideup, slidedown
以指定方向滑入新场景。
-
slideawayleft 及: slideawayright, slideawayup, slideawaydown
以指定方向滑出旧场景。
-
pushright 及: pushleft, pushtop, pushbottom
新场景把旧场景从指定的边界推出。
-
irisin 及: irisout
使用一个矩形iris显示新界面,或者隐藏旧界面。
高级转场
-
MultipleTransition(args)
返回一个转场效果,其是多个转场效果顺序显示之后的集。
args
一个包含奇数个物件的列表。列表中奇数序号的物件必须是场景,偶数序号的物件必须是转场效果。这里说的场景可以是如下类别之一:- 可视组件。
- false值,表示使用旧场景。
- true值,表示使用新场景。
大多数情况下,第一个入参会是false而最后一个是true。
args 中的转场按顺序执行。对每一个转场效果而言,其前面的参数就是旧场景,其后面的参数就是新场景。举例:
define logodissolve = MultipleTransition([ False, Dissolve(0.5), "logo.jpg", Pause(1.0), "logo.jpg", dissolve, True])
这个例子中,首先会使用溶解效果切换到 logo.jpg 文件,等待1秒钟后,再使用溶解效果切换至新场景。
-
CropMove(time, mode=”slideright”, startcrop=(0.0, 0.0, 0.0, 1.0), startpos=(0.0, 0.0), endcrop=(0.0, 0.0, 1.0, 1.0), endpos=(0.0, 0.0), topnew=True)
返回一个转场效果,其会剪裁一个场景并将其放置在界面中指定位置。其可以模板化处理一堆效果,这些效果的共通点是将界面分割成矩形条(slice)。
- time 转场效果耗时。
- mode 转场模式名。转场模式总共有3大类:wipes、slides、其他。也可以是“custom”,是一个用户自己定义的模式。
在wipe模式下,原图像先保持不变,然后逐渐使用转场效果全部擦除。例如,在“wiperight”模式下,一个刷子会从左到右擦除原图像,即先擦除界面最左边的图像,接着擦除界面中间,最后擦除界面最右边。其他的wipe包括“wipeleft”、“wipedown”和“wipeup”。
在slide模式下,图像会移动。在“slideright”模式下,图像的右边从界面的左边开始,平移至界面右边,完成整个转场过程。其他slide模式包括“slideleft”、“slidedown”和“slideup”。
还有slideaway模式,这个模式下原图像在新图像上层,平移出界面。slideaway模式包括“slideawayright”、“slideawayleft”、“slideawayup”和“slideawaydown”。
我们还支持矩形iris,包括“irisin”和“irisout”。
下列参数值在模式为“custom”的情况下才会使用。位置信息与界面尺寸相关,剪裁大小与图像尺寸相关。一个(0.25, 0.0, 0.5, 1.0)的剪裁会使用某个图像的中间一小块。
- startcrop : 顶层图像的剪裁起始矩形。一个4元素的元组,包含x、y、width和height。
- startpos : 顶层图像绘制在界面上起始坐标。一个2元素的元组,包含x和y。
- endcrop : 顶层图像的剪裁结束矩形。一个4元素的元组,包含x、y、width和height。
- endpos : 顶层图像绘制在界面上结束坐标。一个2元素的元组,包含x和y。
- topnew : 若该值为真(true),被剪裁和移动的是新场景。若该值为假(false),被剪裁和移动的是旧场景。
- ImageDissolve(image, time, ramplen=8, reverse=False, alpha=True, time_warp=None)
返回一个转场效果,其使用溶解特效切换新旧界面,并利用某个图像控制溶解过程。这意味着纯白的像素首先被溶解,而纯黑的像素最后溶解。
- image 使用的控制图像。其必须是一个图片文件或者图像控制器。控制图像需要与待溶解场景的尺寸一致。
- time 溶解效果持续时间。
- ramplen 色彩蔓延(ramp)步长。其必须是一个2的整次幂。默认值是8,当纯白像素全部溶解之后,下一步溶解的像素是在灰度上比纯白色低8度的颜色。
- reverse 若该值为真(true),黑色像素反而先于白色像素溶解。
- alpha 若该值为真(true),溶解效果会使用alpha通道。若该值为假(false),直接替换原界面,这样效率比较高。
- time_warp 一个调整时间线的功能函数。若不为空值(None),其应该是一个使用0.0至1.0之间的小数作为输入的函数,返回结果也是0.0至1.0之间。