文章

Ren'Py

编辑script.rpy

# 游戏在此开始。
label start:
    "你开始了游戏"

角色和图像

无角色的对话:用""括起来就行了。

有角色对话,用define e = Character("艾琳")定义角色,角色 "对话"来表示。

三引号可以创建多条对话,换条需要双换行。

文本内插变量

"文本内插变量:[playername]"

标签使用{}引导

"{color=#f00}红色{/color}"
"{cps=20}固定速度{/cps} {cps=*2}两倍速{/cps}
"中断并换行{p}中断不换行{w}直接显示{fast}不停顿直接下一句{nw}"

笔记:{nw}好像可以和{fast}配合,或者和pauseextend ""也很妙,可以显示些意想不到的效果。

size大小 color颜色 font字体 alpha透明度 b粗体 i斜体 a超链接

角色用Character()类定义。用what_who_区分对对话文本和角色名进行操作。 size文本大小 color颜色 outlines外边框 [(宽度, 颜色, x偏移, z偏移)] font字体 prefix前缀 suffix后缀 image图像 window_background背景框 bold粗体

image是给人物加图像标签,例如image=eileen时,游戏会把eileen *形式的所有图片关联起来。

图片名称应该是eileen happy.png之类,eileen为标签,后面的都称为图像属性。

    show eileen happy
    e "很高兴认识你。"
    # 相当于
    e happy "很高兴认识你。"

可以直接读图像,也可以定义图像

image eileen normal = "images/charater/eileen1.png"

图像显示分为scene和show,scene会清除当前页面的所有图像,然后显示该图像。

显示图像时,可以用at后跟变换。hide后不接变换。

show pic at left # 左边显示图片
show pic at right # 跑到右边
show pic at left as pic2 # 图片分身!

图像的转场可以使用with,常用的标准函数有dissolvefade。隐藏图像通常用hide

scene bg
with fade
"fade"
show pic at left
with dissolve
"dissolve"
hide pic
with dissolve
"hide"

其他转场可以用遮罩ImageDissolveAlphaDissolve

ATL是动画和变换语言。

定义变换:

transform centerleft:
    xalign 0.1
    yalign 0.5

使用时可以在at后使用。

图像的基础语法:

anchor锚点坐标 pos坐标 offset偏离 alignposanchor设置为相同的值(方便把图图片在游戏中整体布局) zoom放大倍数 alpha透明度 rotate角度

注意0.00不一样,整数认为是像素,小数认为是屏幕大小。

定义样式:

style drop_shadow_1:
    size 40
    outlines [ (0, "#101010", 2, 2) ]

image test_text_1 = Text("测试文本", style="drop_shadow_1")

音频

音频文件可以新建一个music目录,方便管理。

声音播放有三种music循环播放,sound播放一次,voice播放一次并且点击就会停止。可以用stop来立即停止音乐。

define music1 = "music/music1.mp3"

play music music1 fadein
play sound sound1
voice voice1
stop music fadeout
play music [music1, music2]
queue music [music1, music2] loop

<>内加量用于控制播放时间,另有函数获取播放时间。

跳转

menu语句能够给玩家一个分支选项,jump calllabel用于跳转。

define x = 0
menu:
    "选择你的角色"
    "Choice 1":
        $ x = 1
    "Choice 2":
        python:
            x = 2
"你好"
if x == 1:
    "你选择了1"
else:
    "你选择了2"

在ren’py里使用python时(一般只有赋值语句需要),可以使用$作为单行代码,python:引导多行代码。

opyions.rpy下都是设置。

文字显示速度,preferences.text_cps,每秒显示的字符数。

图层,内部定义了四个图层,master是在sceneshowhide中默认使用的图层。

笔记:这样的话,with dis就不会动对话框了。

define dis = { "master" : Dissolve(1.0) }

图片可以用contains来包含多个部分。

image purecolor:
    contains:
        "#000"
        topleft
        size(640, 360)
    contains:
        topright
        "#fff"
        size(640, 360)

图像变换

show pic
    xalign 0.0
    yalign 0.0
    time 1.0
    parallel:
        ease 3 xalign 1.0
    parallel:
        easein 3 yalign 1.0

变换函数:linear线性ease慢快慢easein快慢easeout慢快pasue暂停跳转。

parallel会同时实现,choice是随机选择一个。

vscode插件,按tab就会显示所有函数。例如tabtransistions就会得到

1
2
3
4
5
6
7
8
9
fade, dissolve, pixellate, move,
moveinright (Also: moveinleft, moveintop,moveinbottom),
moveoutright (Also: moveoutleft, moveouttop,moveoutbottom),
ease (Also: easeinright, easeinleft, easeintop,easeinbottom, easeoutright, easeoutleft,easeouttop, easeoutbottom),
zoomin, zoomout, zoominout, vpunch, hpunch,blinds, squares,
wipeleft (Also: wiperight, wipeup, wipedown),
slideleft (Also:  slideright, slideup,slidedown),
slideawayleft (Also: slideawayright,slideawayup, slideawaydown),
irisin, irisout.

这些都是转场特效。

高级转场可以用ImageDissolve(image, time, ramplen, )

clockwise = ImageDissolve("")
label before_main_menu:
    scene purecolor with dissolve
    pause

function语句允许ATL使用Python函数控制ATL特性(property)。

第一个入参是一个transform对象。transform特性可以通过该对象进行设定。 第二个入参是显示时间轴,表示函数开始执行到现在经过的秒数。 第三个入参是动画时间轴,表示具有相同标签(tag)的某物在整个界面上已存在的秒数。 如果函数返回一个数值,其会在数值对应的时间(秒)后再次被调用。(0秒表示尽可能快地调用该函数。)如果函数返回空值(None),主控流程会跳到下一个ATL语句。 除了修改第一个入参中的Transform对象之外,该函数不应该包含其他作用。 在可以在任意时间传入任意值,以启用预加载。

init python:
    def slide_function(trans, st, at):
        if st > 1.0:
            trans.xalign = 1.0
            return None
        else:
            trans.xalign = st
            return 0

label start:
    show logo base:
        function slide_function
        pause 1.0
        repeat
本文由作者按照 CC BY 4.0 进行授权