Renpy 笔记

发布于 2021-01-29  0 次阅读


角色

有角色的对话,需要 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!"

图像及其变换

标准图像展示有两种,sceneshow

  • scene:清楚当前界面的所有图像,然后展示该图像
  • show:展示图像

显示一个图像时,通常可以使用 at 来决定图像的位置(及变换),at 的标准函数有两个:leftright

图像的变换可以使用 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

音乐和音效

标准声音播放有三种:musicsoundvioce

  • music:默认循环播放。
  • sound:默认播放一次。
  • voice:默认播放一次并且点击就会停止。

可以使用 stop 语句来立即停止音乐。

选项与分支

menu 语句能够给玩家提供一个分支选项

使用 jumplabel 来确定选项对应的不同结果。

可以随时使用 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显示新界面,或者隐藏旧界面。

高级转场

  1. 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秒钟后,再使用溶解效果切换至新场景。

  2. 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),被剪裁和移动的是旧场景。
  3. 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之间。

大变に气分がいい